@@ -13,6 +13,11 @@ import {getColIconByType, getColNameByType} from "../col";
1313import { getCompressURL } from "../../../../util/image" ;
1414import { getPageSize } from "../groups" ;
1515
16+ interface IIds {
17+ groupId : string ,
18+ fieldId : string ,
19+ }
20+
1621interface 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