improve performance of object view
This commit is contained in:
Vendored
+20
-13
@@ -2085,7 +2085,7 @@
|
|||||||
[appliedFilter, resultCount],
|
[appliedFilter, resultCount],
|
||||||
() => translation.searchTitleText(appliedFilter.value, resultCount.value)
|
() => translation.searchTitleText(appliedFilter.value, resultCount.value)
|
||||||
);
|
);
|
||||||
const messageObjects = new MapState();
|
const showingMessageObjects = new MapState();
|
||||||
const cannotReset = createProxyState(
|
const cannotReset = createProxyState(
|
||||||
[appliedFilter],
|
[appliedFilter],
|
||||||
() => appliedFilter.value == ""
|
() => appliedFilter.value == ""
|
||||||
@@ -2096,20 +2096,27 @@
|
|||||||
}
|
}
|
||||||
function applyFilter() {
|
function applyFilter() {
|
||||||
appliedFilter.value = filterInput.value;
|
appliedFilter.value = filterInput.value;
|
||||||
}
|
|
||||||
function updateObjects() {
|
|
||||||
const allObjects = [...chat.objects.value.entries()];
|
const allObjects = [...chat.objects.value.entries()];
|
||||||
const matchingObjects = allObjects.filter((entry) => {
|
const matchingObjects = allObjects.filter((entry) => {
|
||||||
let objectTitle = entry[1].title || translation.untitledObject;
|
return checkMatchesFilter(entry[1]);
|
||||||
const regex = new RegExp(appliedFilter.value.toLowerCase());
|
|
||||||
return regex.test(objectTitle.toLowerCase());
|
|
||||||
});
|
});
|
||||||
resultCount.value = matchingObjects.length;
|
resultCount.value = matchingObjects.length;
|
||||||
messageObjects.clear();
|
showingMessageObjects.clear();
|
||||||
matchingObjects.forEach((entry) => messageObjects.set(...entry));
|
matchingObjects.forEach((entry) => showingMessageObjects.set(...entry));
|
||||||
}
|
}
|
||||||
bulkSubscribe([appliedFilter, chat.objects], updateObjects);
|
chat.objects.handleAddition((messageObject) => {
|
||||||
updateObjects();
|
if (checkMatchesFilter(messageObject) == false) return;
|
||||||
|
showingMessageObjects.set(messageObject.id, messageObject);
|
||||||
|
chat.objects.handleRemoval(messageObject, () => {
|
||||||
|
showingMessageObjects.remove(messageObject.id);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
function checkMatchesFilter(messageObject) {
|
||||||
|
let objectTitle = messageObject.title || translation.untitledObject;
|
||||||
|
const regex = new RegExp(appliedFilter.value.toLowerCase());
|
||||||
|
return regex.test(objectTitle.toLowerCase());
|
||||||
|
}
|
||||||
|
applyFilter();
|
||||||
const objectModal = createProxyState(
|
const objectModal = createProxyState(
|
||||||
[chat.objects, selectedObject],
|
[chat.objects, selectedObject],
|
||||||
() => {
|
() => {
|
||||||
@@ -2136,7 +2143,7 @@
|
|||||||
}
|
}
|
||||||
return getViewFunction()(
|
return getViewFunction()(
|
||||||
chat,
|
chat,
|
||||||
messageObjects,
|
showingMessageObjects,
|
||||||
selectedObject,
|
selectedObject,
|
||||||
isShowingObjectModal
|
isShowingObjectModal
|
||||||
);
|
);
|
||||||
@@ -2165,7 +2172,7 @@
|
|||||||
class: "object-content width-100 height-100 flex scroll-no",
|
class: "object-content width-100 height-100 flex scroll-no",
|
||||||
"children:set": mainView
|
"children:set": mainView
|
||||||
}
|
}
|
||||||
), /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": isShowingFilterModel }, /* @__PURE__ */ createElement("div", { style: "max-width: unset; width: 100%" }, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, translation.filterObjects), /* @__PURE__ */ createElement("div", { class: "flex-column" }, /* @__PURE__ */ createElement("label", { class: "tile" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "search"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, translation.searchByTitle), /* @__PURE__ */ createElement(
|
), /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": isShowingFilterModel }, /* @__PURE__ */ createElement("div", { style: "max-width: 2084px" }, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, translation.filterObjects), /* @__PURE__ */ createElement("div", { class: "flex-column" }, /* @__PURE__ */ createElement("label", { class: "tile" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "search"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("span", null, translation.searchByTitle), /* @__PURE__ */ createElement(
|
||||||
"input",
|
"input",
|
||||||
{
|
{
|
||||||
"bind:value": filterInput,
|
"bind:value": filterInput,
|
||||||
@@ -2182,7 +2189,7 @@
|
|||||||
translation.reset
|
translation.reset
|
||||||
), /* @__PURE__ */ createElement("button", { class: "width-50 flex primary", "on:click": applyFilter }, translation.search, /* @__PURE__ */ createElement("span", { class: "icon" }, "arrow_forward"))), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("span", { class: "secondary", "subscribe:innerText": resultText }), ObjectGridView(
|
), /* @__PURE__ */ createElement("button", { class: "width-50 flex primary", "on:click": applyFilter }, translation.search, /* @__PURE__ */ createElement("span", { class: "icon" }, "arrow_forward"))), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("span", { class: "secondary", "subscribe:innerText": resultText }), ObjectGridView(
|
||||||
chat,
|
chat,
|
||||||
messageObjects,
|
showingMessageObjects,
|
||||||
selectedObject,
|
selectedObject,
|
||||||
isShowingObjectModal
|
isShowingObjectModal
|
||||||
)), /* @__PURE__ */ createElement("button", { "on:click": closeFilters }, translation.close, /* @__PURE__ */ createElement("span", { class: "icon" }, "close")))), /* @__PURE__ */ createElement("div", { "children:set": objectModal }));
|
)), /* @__PURE__ */ createElement("button", { "on:click": closeFilters }, translation.close, /* @__PURE__ */ createElement("span", { class: "icon" }, "close")))), /* @__PURE__ */ createElement("div", { "children:set": objectModal }));
|
||||||
|
|||||||
Vendored
+4
@@ -787,6 +787,10 @@ header button {
|
|||||||
max-height: 100% !important;
|
max-height: 100% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.modal > div > :is(button, div.flex-row) {
|
||||||
|
min-height: var(--control-height);
|
||||||
|
}
|
||||||
|
|
||||||
.ellipsis {
|
.ellipsis {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ export function ObjectPane(chat: Chat) {
|
|||||||
const resultText = React.createProxyState([appliedFilter, resultCount], () =>
|
const resultText = React.createProxyState([appliedFilter, resultCount], () =>
|
||||||
translation.searchTitleText(appliedFilter.value, resultCount.value)
|
translation.searchTitleText(appliedFilter.value, resultCount.value)
|
||||||
);
|
);
|
||||||
const messageObjects = new React.MapState<MessageObject>();
|
const showingMessageObjects = new React.MapState<MessageObject>();
|
||||||
const cannotReset = React.createProxyState(
|
const cannotReset = React.createProxyState(
|
||||||
[appliedFilter],
|
[appliedFilter],
|
||||||
() => appliedFilter.value == ""
|
() => appliedFilter.value == ""
|
||||||
@@ -60,21 +60,31 @@ export function ObjectPane(chat: Chat) {
|
|||||||
}
|
}
|
||||||
function applyFilter() {
|
function applyFilter() {
|
||||||
appliedFilter.value = filterInput.value;
|
appliedFilter.value = filterInput.value;
|
||||||
}
|
|
||||||
|
|
||||||
function updateObjects() {
|
|
||||||
const allObjects = [...chat.objects.value.entries()];
|
const allObjects = [...chat.objects.value.entries()];
|
||||||
const matchingObjects = allObjects.filter((entry) => {
|
const matchingObjects = allObjects.filter((entry) => {
|
||||||
let objectTitle = entry[1].title || translation.untitledObject;
|
return checkMatchesFilter(entry[1]);
|
||||||
const regex = new RegExp(appliedFilter.value.toLowerCase());
|
|
||||||
return regex.test(objectTitle.toLowerCase());
|
|
||||||
});
|
});
|
||||||
resultCount.value = matchingObjects.length;
|
resultCount.value = matchingObjects.length;
|
||||||
messageObjects.clear();
|
showingMessageObjects.clear();
|
||||||
matchingObjects.forEach((entry) => messageObjects.set(...entry));
|
matchingObjects.forEach((entry) => showingMessageObjects.set(...entry));
|
||||||
}
|
}
|
||||||
React.bulkSubscribe([appliedFilter, chat.objects], updateObjects);
|
|
||||||
updateObjects();
|
chat.objects.handleAddition(messageObject => {
|
||||||
|
if (checkMatchesFilter(messageObject) == false) return;
|
||||||
|
showingMessageObjects.set(messageObject.id, messageObject);
|
||||||
|
chat.objects.handleRemoval(messageObject, () => {
|
||||||
|
showingMessageObjects.remove(messageObject.id);
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
function checkMatchesFilter(messageObject: MessageObject) {
|
||||||
|
let objectTitle = messageObject.title || translation.untitledObject;
|
||||||
|
const regex = new RegExp(appliedFilter.value.toLowerCase());
|
||||||
|
return regex.test(objectTitle.toLowerCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
applyFilter();
|
||||||
|
|
||||||
// view
|
// view
|
||||||
const objectModal = React.createProxyState(
|
const objectModal = React.createProxyState(
|
||||||
@@ -106,7 +116,7 @@ export function ObjectPane(chat: Chat) {
|
|||||||
|
|
||||||
return getViewFunction()(
|
return getViewFunction()(
|
||||||
chat,
|
chat,
|
||||||
messageObjects,
|
showingMessageObjects,
|
||||||
selectedObject,
|
selectedObject,
|
||||||
isShowingObjectModal
|
isShowingObjectModal
|
||||||
);
|
);
|
||||||
@@ -144,7 +154,7 @@ export function ObjectPane(chat: Chat) {
|
|||||||
></div>
|
></div>
|
||||||
|
|
||||||
<div class="modal" toggle:open={isShowingFilterModel}>
|
<div class="modal" toggle:open={isShowingFilterModel}>
|
||||||
<div style="max-width: unset; width: 100%">
|
<div style="max-width: 2084px">
|
||||||
<main>
|
<main>
|
||||||
<h2>{translation.filterObjects}</h2>
|
<h2>{translation.filterObjects}</h2>
|
||||||
|
|
||||||
@@ -181,7 +191,7 @@ export function ObjectPane(chat: Chat) {
|
|||||||
|
|
||||||
{ObjectGridView(
|
{ObjectGridView(
|
||||||
chat,
|
chat,
|
||||||
messageObjects,
|
showingMessageObjects,
|
||||||
selectedObject,
|
selectedObject,
|
||||||
isShowingObjectModal
|
isShowingObjectModal
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user