Skip to content

Commit b786163

Browse files
committed
🎨 #15562
1 parent c9a68c7 commit b786163

File tree

1 file changed

+46
-15
lines changed

1 file changed

+46
-15
lines changed

app/src/protyle/render/av/gallery/render.ts

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ import {getColIconByType, getColNameByType} from "../col";
1313
import {getCompressURL} from "../../../../util/image";
1414
import {getPageSize} from "../groups";
1515

16+
interface IIds {
17+
groupId: string,
18+
fieldId: string,
19+
}
20+
1621
interface ITableOptions {
1722
protyle: IProtyle,
1823
blockElement: HTMLElement,
@@ -21,20 +26,40 @@ interface ITableOptions {
2126
renderAll: boolean,
2227
resetData: {
2328
alignSelf: string,
24-
selectItemIds: string[],
29+
selectItemIds: IIds[],
30+
editIds: IIds[],
2531
isSearching: boolean,
26-
editIds: string[],
2732
pageSizes: { [key: string]: string },
2833
query: string,
2934
oldOffset: number,
3035
}
3136
}
3237

33-
const getGalleryHTML = (data: IAVGallery, selectItemIds: string[], editIds: string[]) => {
38+
const getGalleryHTML = (data: IAVGallery, selectItemIds: IIds[], editIds: IIds[], groupId: string) => {
3439
let galleryHTML = "";
3540
// body
3641
data.cards.forEach((item: IAVGalleryItem, rowIndex: number) => {
37-
galleryHTML += `<div data-id="${item.id}" draggable="true" class="av__gallery-item${selectItemIds.includes(item.id) ? " av__gallery-item--select" : ""}">`;
42+
let hasSelected = selectItemIds.find(selectId => {
43+
if (selectId.groupId === groupId && selectId.fieldId === item.id) {
44+
return true;
45+
}
46+
});
47+
hasSelected = selectItemIds.find(selectId => {
48+
if (selectId.fieldId === item.id) {
49+
return true;
50+
}
51+
});
52+
let hasEdit = editIds.find(edit => {
53+
if (edit.groupId === groupId && edit.fieldId === item.id) {
54+
return true;
55+
}
56+
});
57+
hasEdit= editIds.find(edit => {
58+
if (edit.fieldId === item.id) {
59+
return true;
60+
}
61+
});
62+
galleryHTML += `<div data-id="${item.id}" draggable="true" class="av__gallery-item${hasSelected ? " av__gallery-item--select" : ""}">`;
3863
if (data.coverFrom !== 0) {
3964
const coverClass = "av__gallery-cover av__gallery-cover--" + data.cardAspectRatio;
4065
if (item.coverURL) {
@@ -49,7 +74,7 @@ const getGalleryHTML = (data: IAVGallery, selectItemIds: string[], editIds: stri
4974
galleryHTML += `<div class="${coverClass}"></div>`;
5075
}
5176
}
52-
galleryHTML += `<div class="av__gallery-fields${editIds.includes(item.id) ? " av__gallery-fields--edit" : ""}">`;
77+
galleryHTML += `<div class="av__gallery-fields${hasEdit ? " av__gallery-fields--edit" : ""}">`;
5378
item.values.forEach((cell, fieldsIndex) => {
5479
if (data.fields[fieldsIndex].hidden) {
5580
return;
@@ -107,7 +132,7 @@ const renderGroupGallery = (options: ITableOptions) => {
107132
options.data.view.groups.forEach((group: IAVGallery) => {
108133
if (group.groupHidden === 0) {
109134
avBodyHTML += `${getGroupTitleHTML(group, group.cards.length)}
110-
<div data-group-id="${group.id}" data-page-size="${group.pageSize}" class="av__body${group.groupFolded ? " fn__none" : ""}">${getGalleryHTML(group, options.resetData.selectItemIds, options.resetData.editIds)}</div>`;
135+
<div data-group-id="${group.id}" data-page-size="${group.pageSize}" class="av__body${group.groupFolded ? " fn__none" : ""}">${getGalleryHTML(group, options.resetData.selectItemIds, options.resetData.editIds, group.id)}</div>`;
111136
}
112137
});
113138
if (options.renderAll) {
@@ -228,15 +253,21 @@ export const renderGallery = async (options: {
228253
data?: IAV,
229254
}) => {
230255
const searchInputElement = options.blockElement.querySelector('[data-type="av-search"]') as HTMLInputElement;
231-
const editIds: string[] = [];
256+
const editIds: IIds[] = [];
232257
options.blockElement.querySelectorAll(".av__gallery-fields--edit").forEach(item => {
233-
editIds.push(item.parentElement.getAttribute("data-id"));
258+
editIds.push({
259+
groupId: (hasClosestByClassName(item, "av__body") as HTMLElement).dataset.groupId || "",
260+
fieldId: item.parentElement.getAttribute("data-id"),
261+
});
234262
});
235-
const selectItemIds: string[] = [];
236-
options.blockElement.querySelectorAll(".av__gallery-item--select").forEach(rowItem => {
237-
const rowId = rowItem.getAttribute("data-id");
238-
if (rowId) {
239-
selectItemIds.push(rowId);
263+
const selectItemIds: IIds[] = [];
264+
options.blockElement.querySelectorAll(".av__gallery-item--select").forEach(galleryItem => {
265+
const fieldId = galleryItem.getAttribute("data-id");
266+
if (fieldId) {
267+
selectItemIds.push({
268+
groupId: (hasClosestByClassName(galleryItem, "av__body") as HTMLElement).dataset.groupId || "",
269+
fieldId
270+
});
240271
}
241272
});
242273
const pageSizes: { [key: string]: string } = {};
@@ -294,12 +325,12 @@ export const renderGallery = async (options: {
294325
});
295326
return;
296327
}
297-
const bodyHTML = getGalleryHTML(view, selectItemIds, editIds);
328+
const bodyHTML = getGalleryHTML(view, selectItemIds, editIds, "");
298329
if (options.renderAll) {
299330
options.blockElement.firstElementChild.outerHTML = `<div class="av__container fn__block">
300331
${genTabHeaderHTML(data, resetData.isSearching || !!resetData.query, !options.protyle.disabled && !hasClosestByAttribute(options.blockElement, "data-type", "NodeBlockQueryEmbed"))}
301332
<div>
302-
<div class="av__body" data-page-size="${view.pageSize}">
333+
<div class="av__body" data-group-id="" data-page-size="${view.pageSize}">
303334
${bodyHTML}
304335
</div>
305336
</div>

0 commit comments

Comments
 (0)