add settings pane for info
This commit is contained in:
Vendored
+32
-13
@@ -2754,7 +2754,8 @@
|
|||||||
appearance: "Appearance",
|
appearance: "Appearance",
|
||||||
regional: "Language+Region",
|
regional: "Language+Region",
|
||||||
info: "About Comms"
|
info: "About Comms"
|
||||||
}
|
},
|
||||||
|
version: "Version"
|
||||||
},
|
},
|
||||||
connectionModal: {
|
connectionModal: {
|
||||||
connectionModalHeadline: "Manage Connections",
|
connectionModalHeadline: "Manage Connections",
|
||||||
@@ -4097,6 +4098,17 @@
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// src/View/Components/infoTile.tsx
|
||||||
|
function InfoTile(icon, label, content) {
|
||||||
|
let contentState;
|
||||||
|
if (typeof content == "string") {
|
||||||
|
contentState = new State(content);
|
||||||
|
} else {
|
||||||
|
contentState = content;
|
||||||
|
}
|
||||||
|
return /* @__PURE__ */ createElement("div", { class: "tile" }, /* @__PURE__ */ createElement("span", { class: "icon" }, icon), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, label), /* @__PURE__ */ createElement("b", { class: "break-word", "subscribe:innerText": contentState })));
|
||||||
|
}
|
||||||
|
|
||||||
// src/View/Modals/chatMessageInfoModal.tsx
|
// src/View/Modals/chatMessageInfoModal.tsx
|
||||||
function ChatMessageInfoModal(chatMessageViewModel) {
|
function ChatMessageInfoModal(chatMessageViewModel) {
|
||||||
return /* @__PURE__ */ createElement(
|
return /* @__PURE__ */ createElement(
|
||||||
@@ -4105,13 +4117,7 @@
|
|||||||
class: "modal",
|
class: "modal",
|
||||||
"toggle:open": chatMessageViewModel.isPresentingInfoModal
|
"toggle:open": chatMessageViewModel.isPresentingInfoModal
|
||||||
},
|
},
|
||||||
/* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, translations.chatPage.message.messageInfoHeadline), /* @__PURE__ */ createElement("div", { class: "flex-column gap" }, /* @__PURE__ */ createElement("div", { class: "tile" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "account_circle"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, translations.chatPage.message.sentBy), /* @__PURE__ */ createElement("b", { class: "break-word" }, chatMessageViewModel.sender))), /* @__PURE__ */ createElement("div", { class: "tile" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "schedule"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, translations.chatPage.message.timeSent), /* @__PURE__ */ createElement("b", { class: "break-word" }, chatMessageViewModel.dateSent))), /* @__PURE__ */ createElement("div", { class: "tile" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "forum"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, translations.chatPage.message.channel), /* @__PURE__ */ createElement("b", { class: "break-word" }, chatMessageViewModel.channel))), /* @__PURE__ */ createElement("div", { class: "tile" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "description"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, translations.chatPage.message.messageContent), /* @__PURE__ */ createElement(
|
/* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, translations.chatPage.message.messageInfoHeadline), /* @__PURE__ */ createElement("div", { class: "flex-column gap" }, InfoTile("account_circle", translations.chatPage.message.sentBy, chatMessageViewModel.sender), InfoTile("schedule", translations.chatPage.message.timeSent, chatMessageViewModel.dateSent), InfoTile("forum", translations.chatPage.message.channel, chatMessageViewModel.channel), InfoTile("description", translations.chatPage.message.messageContent, chatMessageViewModel.body)), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { class: "flex-column gap" }, /* @__PURE__ */ createElement("button", { "on:click": chatMessageViewModel.copyMessage }, translations.chatPage.message.copyMessageButton, /* @__PURE__ */ createElement("span", { class: "icon" }, "content_copy")), /* @__PURE__ */ createElement("button", { "on:click": chatMessageViewModel.resendMessage }, translations.chatPage.message.resendMessageButton, /* @__PURE__ */ createElement("span", { class: "icon" }, "redo")), /* @__PURE__ */ createElement("button", { "on:click": chatMessageViewModel.decryptMessage }, translations.chatPage.message.decryptMessageButton, /* @__PURE__ */ createElement("span", { class: "icon" }, "key"))), /* @__PURE__ */ createElement("hr", null), MessageReactionButtonRow(chatMessageViewModel)), /* @__PURE__ */ createElement("button", { "on:click": chatMessageViewModel.hideInfoModal }, translations.general.closeButton, /* @__PURE__ */ createElement("span", { class: "icon" }, "close")))
|
||||||
"b",
|
|
||||||
{
|
|
||||||
class: "break-word",
|
|
||||||
"subscribe:innerText": chatMessageViewModel.body
|
|
||||||
}
|
|
||||||
)))), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { class: "flex-column gap" }, /* @__PURE__ */ createElement("button", { "on:click": chatMessageViewModel.copyMessage }, translations.chatPage.message.copyMessageButton, /* @__PURE__ */ createElement("span", { class: "icon" }, "content_copy")), /* @__PURE__ */ createElement("button", { "on:click": chatMessageViewModel.resendMessage }, translations.chatPage.message.resendMessageButton, /* @__PURE__ */ createElement("span", { class: "icon" }, "redo")), /* @__PURE__ */ createElement("button", { "on:click": chatMessageViewModel.decryptMessage }, translations.chatPage.message.decryptMessageButton, /* @__PURE__ */ createElement("span", { class: "icon" }, "key"))), /* @__PURE__ */ createElement("hr", null), MessageReactionButtonRow(chatMessageViewModel)), /* @__PURE__ */ createElement("button", { "on:click": chatMessageViewModel.hideInfoModal }, translations.general.closeButton, /* @__PURE__ */ createElement("span", { class: "icon" }, "close")))
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6252,13 +6258,20 @@
|
|||||||
|
|
||||||
// src/View/Components/splitModal.tsx
|
// src/View/Components/splitModal.tsx
|
||||||
function SplitModal(leftView, rightView, scrollButtonLabel, extendedStyle = false, navigationState) {
|
function SplitModal(leftView, rightView, scrollButtonLabel, extendedStyle = false, navigationState) {
|
||||||
const view = /* @__PURE__ */ createElement("div", { class: "split-modal", "toggle:extended": extendedStyle }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("div", { class: "scroll-area", "children:set": leftView }), /* @__PURE__ */ createElement("div", { class: "detail-button-wrapper", "toggle:hidden": navigationState != void 0 }, /* @__PURE__ */ createElement("button", { class: "ghost", "on:click": scrollToDetails }, /* @__PURE__ */ createElement(
|
const view = /* @__PURE__ */ createElement("div", { class: "split-modal", "toggle:extended": extendedStyle }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("div", { class: "scroll-area", "children:set": leftView }), /* @__PURE__ */ createElement(
|
||||||
|
"div",
|
||||||
|
{
|
||||||
|
class: "detail-button-wrapper",
|
||||||
|
"toggle:hidden": navigationState != void 0
|
||||||
|
},
|
||||||
|
/* @__PURE__ */ createElement("button", { class: "ghost", "on:click": scrollToDetails }, /* @__PURE__ */ createElement(
|
||||||
"span",
|
"span",
|
||||||
{
|
{
|
||||||
class: "ellipsis",
|
class: "ellipsis",
|
||||||
"subscribe:innerText": scrollButtonLabel
|
"subscribe:innerText": scrollButtonLabel
|
||||||
}
|
}
|
||||||
), /* @__PURE__ */ createElement("span", { class: "icon" }, "arrow_forward")))), /* @__PURE__ */ createElement("div", { class: "scroll-area", "children:set": rightView }));
|
), /* @__PURE__ */ createElement("span", { class: "icon" }, "arrow_forward"))
|
||||||
|
)), /* @__PURE__ */ createElement("div", { class: "scroll-area", "children:set": rightView }));
|
||||||
function scrollToDetails() {
|
function scrollToDetails() {
|
||||||
view.scrollLeft = view.scrollWidth;
|
view.scrollLeft = view.scrollWidth;
|
||||||
}
|
}
|
||||||
@@ -6608,16 +6621,19 @@
|
|||||||
|
|
||||||
// src/View/Modals/settingsModal.tsx
|
// src/View/Modals/settingsModal.tsx
|
||||||
function SettingsModal(settingsViewModel2) {
|
function SettingsModal(settingsViewModel2) {
|
||||||
const detailView = createProxyState([settingsViewModel2.selectedModalPage], () => {
|
const detailView = createProxyState(
|
||||||
|
[settingsViewModel2.selectedModalPage],
|
||||||
|
() => {
|
||||||
switch (settingsViewModel2.selectedModalPage.value) {
|
switch (settingsViewModel2.selectedModalPage.value) {
|
||||||
case 0 /* Appearance */:
|
case 0 /* Appearance */:
|
||||||
return /* @__PURE__ */ createElement("div", null, "Appearance");
|
return /* @__PURE__ */ createElement("div", null, "Appearance");
|
||||||
case 1 /* Regional */:
|
case 1 /* Regional */:
|
||||||
return /* @__PURE__ */ createElement("div", null, "Regional");
|
return /* @__PURE__ */ createElement("div", null, "Regional");
|
||||||
case 2 /* Info */:
|
case 2 /* Info */:
|
||||||
return /* @__PURE__ */ createElement("div", null, "Info");
|
return SettingsInfoPane(settingsViewModel2);
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
);
|
||||||
return /* @__PURE__ */ createElement(
|
return /* @__PURE__ */ createElement(
|
||||||
"div",
|
"div",
|
||||||
{
|
{
|
||||||
@@ -6662,6 +6678,9 @@
|
|||||||
label
|
label
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
function SettingsInfoPane(settingsViewModel2) {
|
||||||
|
return /* @__PURE__ */ createElement("div", { class: "slide-up" }, /* @__PURE__ */ createElement("h2", null, translations.homePage.appName), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { class: "flex-column gap" }, InfoTile("build", translations.settings.version, settingsViewModel2.coreViewModel.BUILD)));
|
||||||
|
}
|
||||||
|
|
||||||
// src/index.tsx
|
// src/index.tsx
|
||||||
var storageModel = new StorageModel();
|
var storageModel = new StorageModel();
|
||||||
|
|||||||
@@ -1,18 +1,24 @@
|
|||||||
import * as React from "bloatless-react";
|
import * as React from "bloatless-react";
|
||||||
|
|
||||||
export function InfoTile(icon: string, label: string, content: string|React.State<string>) {
|
export function InfoTile(
|
||||||
let contentState: React.State<string>
|
icon: string,
|
||||||
|
label: string,
|
||||||
|
content: string | React.State<string>,
|
||||||
|
) {
|
||||||
|
let contentState: React.State<string>;
|
||||||
if (typeof content == "string") {
|
if (typeof content == "string") {
|
||||||
contentState = new React.State(content);
|
contentState = new React.State(content);
|
||||||
} else {
|
} else {
|
||||||
contentState = content;
|
contentState = content;
|
||||||
}
|
}
|
||||||
|
|
||||||
return <div class="tile">
|
return (
|
||||||
|
<div class="tile">
|
||||||
<span class="icon">{icon}</span>
|
<span class="icon">{icon}</span>
|
||||||
<div>
|
<div>
|
||||||
<span>{label}</span>
|
<span>{label}</span>
|
||||||
<b class="break-word" subscribe:innerText={contentState}></b>
|
<b class="break-word" subscribe:innerText={contentState}></b>
|
||||||
</div>
|
</div>
|
||||||
</div>;
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.modal>div:has(.split-modal[extended]) {
|
.modal > div:has(.split-modal[extended]) {
|
||||||
max-width: 64rem;
|
max-width: 64rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,10 @@ export function SplitModal(
|
|||||||
<div class="split-modal" toggle:extended={extendedStyle}>
|
<div class="split-modal" toggle:extended={extendedStyle}>
|
||||||
<div>
|
<div>
|
||||||
<div class="scroll-area" children:set={leftView}></div>
|
<div class="scroll-area" children:set={leftView}></div>
|
||||||
<div class="detail-button-wrapper" toggle:hidden={navigationState != undefined}>
|
<div
|
||||||
|
class="detail-button-wrapper"
|
||||||
|
toggle:hidden={navigationState != undefined}
|
||||||
|
>
|
||||||
<button class="ghost" on:click={scrollToDetails}>
|
<button class="ghost" on:click={scrollToDetails}>
|
||||||
<span
|
<span
|
||||||
class="ellipsis"
|
class="ellipsis"
|
||||||
|
|||||||
@@ -18,10 +18,26 @@ export function ChatMessageInfoModal(
|
|||||||
<h2>{translations.chatPage.message.messageInfoHeadline}</h2>
|
<h2>{translations.chatPage.message.messageInfoHeadline}</h2>
|
||||||
|
|
||||||
<div class="flex-column gap">
|
<div class="flex-column gap">
|
||||||
{InfoTile("account_circle", translations.chatPage.message.sentBy, chatMessageViewModel.sender)}
|
{InfoTile(
|
||||||
{InfoTile("schedule", translations.chatPage.message.timeSent, chatMessageViewModel.dateSent)}
|
"account_circle",
|
||||||
{InfoTile("forum", translations.chatPage.message.channel, chatMessageViewModel.channel)}
|
translations.chatPage.message.sentBy,
|
||||||
{InfoTile("description", translations.chatPage.message.messageContent, chatMessageViewModel.body)}
|
chatMessageViewModel.sender,
|
||||||
|
)}
|
||||||
|
{InfoTile(
|
||||||
|
"schedule",
|
||||||
|
translations.chatPage.message.timeSent,
|
||||||
|
chatMessageViewModel.dateSent,
|
||||||
|
)}
|
||||||
|
{InfoTile(
|
||||||
|
"forum",
|
||||||
|
translations.chatPage.message.channel,
|
||||||
|
chatMessageViewModel.channel,
|
||||||
|
)}
|
||||||
|
{InfoTile(
|
||||||
|
"description",
|
||||||
|
translations.chatPage.message.messageContent,
|
||||||
|
chatMessageViewModel.body,
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr></hr>
|
<hr></hr>
|
||||||
|
|||||||
@@ -5,18 +5,22 @@ import SettingsViewModel, {
|
|||||||
SettingsModalPages,
|
SettingsModalPages,
|
||||||
} from "../../ViewModel/Global/settingsViewModel";
|
} from "../../ViewModel/Global/settingsViewModel";
|
||||||
import { SplitModal } from "../Components/splitModal";
|
import { SplitModal } from "../Components/splitModal";
|
||||||
|
import { InfoTile } from "../Components/infoTile";
|
||||||
|
|
||||||
export function SettingsModal(settingsViewModel: SettingsViewModel) {
|
export function SettingsModal(settingsViewModel: SettingsViewModel) {
|
||||||
const detailView = React.createProxyState([settingsViewModel.selectedModalPage], () => {
|
const detailView = React.createProxyState(
|
||||||
|
[settingsViewModel.selectedModalPage],
|
||||||
|
() => {
|
||||||
switch (settingsViewModel.selectedModalPage.value) {
|
switch (settingsViewModel.selectedModalPage.value) {
|
||||||
case SettingsModalPages.Appearance:
|
case SettingsModalPages.Appearance:
|
||||||
return <div>Appearance</div>
|
return <div>Appearance</div>;
|
||||||
case SettingsModalPages.Regional:
|
case SettingsModalPages.Regional:
|
||||||
return <div>Regional</div>
|
return <div>Regional</div>;
|
||||||
case SettingsModalPages.Info:
|
case SettingsModalPages.Info:
|
||||||
return <div>Info</div>
|
return SettingsInfoPane(settingsViewModel);
|
||||||
}
|
}
|
||||||
})
|
},
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
@@ -83,3 +87,19 @@ function SettingsPaneButton(
|
|||||||
</button>
|
</button>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function SettingsInfoPane(settingsViewModel: SettingsViewModel) {
|
||||||
|
return (
|
||||||
|
<div class="slide-up">
|
||||||
|
<h2>{translations.homePage.appName}</h2>
|
||||||
|
<hr></hr>
|
||||||
|
<div class="flex-column gap">
|
||||||
|
{InfoTile(
|
||||||
|
"build",
|
||||||
|
translations.settings.version,
|
||||||
|
settingsViewModel.coreViewModel.BUILD,
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -82,6 +82,8 @@ const englishTranslations = {
|
|||||||
regional: "Language+Region",
|
regional: "Language+Region",
|
||||||
info: "About Comms",
|
info: "About Comms",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
version: "Version",
|
||||||
},
|
},
|
||||||
|
|
||||||
connectionModal: {
|
connectionModal: {
|
||||||
@@ -372,6 +374,8 @@ const allTranslations: { [language: string]: typeof englishTranslations } = {
|
|||||||
regional: "Sprache+Region",
|
regional: "Sprache+Region",
|
||||||
info: "Über Comms",
|
info: "Über Comms",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
version: "Version",
|
||||||
},
|
},
|
||||||
|
|
||||||
connectionModal: {
|
connectionModal: {
|
||||||
@@ -633,6 +637,8 @@ const allTranslations: { [language: string]: typeof englishTranslations } = {
|
|||||||
regional: "Idioma+Región",
|
regional: "Idioma+Región",
|
||||||
info: "Sobre Comms",
|
info: "Sobre Comms",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
version: "Versión",
|
||||||
},
|
},
|
||||||
connectionModal: {
|
connectionModal: {
|
||||||
connectionModalHeadline: "Gestionar Conexiones",
|
connectionModalHeadline: "Gestionar Conexiones",
|
||||||
|
|||||||
Reference in New Issue
Block a user