mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-10-31 10:03:18 +00:00 
			
		
		
		
	chore: initial edit board modal
This commit is contained in:
		
							parent
							
								
									073adf6268
								
							
						
					
					
						commit
						0719f54dec
					
				| @ -0,0 +1,54 @@ | ||||
| import { CellIdentifier } from '$app/stores/effects/database/cell/cell_bd_svc'; | ||||
| import { useCell } from '$app/components/_shared/database-hooks/useCell'; | ||||
| import { CellCache } from '$app/stores/effects/database/cell/cell_cache'; | ||||
| import { FieldController } from '$app/stores/effects/database/field/field_controller'; | ||||
| import { FieldType, SelectOptionCellDataPB } from '@/services/backend'; | ||||
| import { TextTypeSvg } from '$app/components/_shared/svg/TextTypeSvg'; | ||||
| import { NumberTypeSvg } from '$app/components/_shared/svg/NumberTypeSvg'; | ||||
| import { DateTypeSvg } from '$app/components/_shared/svg/DateTypeSvg'; | ||||
| import { SingleSelectTypeSvg } from '$app/components/_shared/svg/SingleSelectTypeSvg'; | ||||
| import { MultiSelectTypeSvg } from '$app/components/_shared/svg/MultiSelectTypeSvg'; | ||||
| import { ChecklistTypeSvg } from '$app/components/_shared/svg/ChecklistTypeSvg'; | ||||
| import { UrlTypeSvg } from '$app/components/_shared/svg/UrlTypeSvg'; | ||||
| import { useAppSelector } from '$app/stores/store'; | ||||
| 
 | ||||
| export const EditBoardCell = ({ | ||||
|   cellIdentifier, | ||||
|   cellCache, | ||||
|   fieldController, | ||||
| }: { | ||||
|   cellIdentifier: CellIdentifier; | ||||
|   cellCache: CellCache; | ||||
|   fieldController: FieldController; | ||||
| }) => { | ||||
|   const { data } = useCell(cellIdentifier, cellCache, fieldController); | ||||
|   const databaseStore = useAppSelector((state) => state.database); | ||||
|   return ( | ||||
|     <div className={'flex w-full items-center'}> | ||||
|       <div className={'flex w-[180px] cursor-pointer items-center gap-2 rounded-lg px-4 py-2 hover:bg-shade-6'}> | ||||
|         <div className={'h-5 w-5 flex-shrink-0'}> | ||||
|           {cellIdentifier.fieldType === FieldType.RichText && <TextTypeSvg></TextTypeSvg>} | ||||
|           {cellIdentifier.fieldType === FieldType.Number && <NumberTypeSvg></NumberTypeSvg>} | ||||
|           {cellIdentifier.fieldType === FieldType.DateTime && <DateTypeSvg></DateTypeSvg>} | ||||
|           {cellIdentifier.fieldType === FieldType.SingleSelect && <SingleSelectTypeSvg></SingleSelectTypeSvg>} | ||||
|           {cellIdentifier.fieldType === FieldType.MultiSelect && <MultiSelectTypeSvg></MultiSelectTypeSvg>} | ||||
|           {cellIdentifier.fieldType === FieldType.Checklist && <ChecklistTypeSvg></ChecklistTypeSvg>} | ||||
|           {cellIdentifier.fieldType === FieldType.URL && <UrlTypeSvg></UrlTypeSvg>} | ||||
|         </div> | ||||
|         <span className={'overflow-hidden text-ellipsis whitespace-nowrap'}> | ||||
|           {databaseStore.fields[cellIdentifier.fieldId].title} | ||||
|         </span> | ||||
|       </div> | ||||
|       <div className={'flex-1'}> | ||||
|         {(cellIdentifier.fieldType === FieldType.SingleSelect || cellIdentifier.fieldType === FieldType.MultiSelect) && ( | ||||
|           <div> | ||||
|             {(data as SelectOptionCellDataPB | undefined)?.select_options?.map((option, index) => ( | ||||
|               <div key={index}>{option?.name || ''}</div> | ||||
|             )) || ''} | ||||
|           </div> | ||||
|         )} | ||||
|         {<div>{data as string}</div>} | ||||
|       </div> | ||||
|     </div> | ||||
|   ); | ||||
| }; | ||||
| @ -0,0 +1,41 @@ | ||||
| import { CloseSvg } from '$app/components/_shared/svg/CloseSvg'; | ||||
| import { useRow } from '$app/components/_shared/database-hooks/useRow'; | ||||
| import { DatabaseController } from '$app/stores/effects/database/database_controller'; | ||||
| import { RowInfo } from '$app/stores/effects/database/row/row_cache'; | ||||
| import { EditBoardCell } from '$app/components/board/EditBoardRow/EditBoardCell'; | ||||
| 
 | ||||
| export const EditBoardRow = ({ | ||||
|   onClose, | ||||
|   viewId, | ||||
|   controller, | ||||
|   rowInfo, | ||||
| }: { | ||||
|   onClose: () => void; | ||||
|   viewId: string; | ||||
|   controller: DatabaseController; | ||||
|   rowInfo: RowInfo; | ||||
| }) => { | ||||
|   const { cells } = useRow(viewId, controller, rowInfo); | ||||
| 
 | ||||
|   return ( | ||||
|     <div className={'fixed inset-0 z-20 flex items-center justify-center bg-black/30 backdrop-blur-sm'}> | ||||
|       <div className={'relative flex min-w-[70%] flex-col gap-8 rounded-xl bg-white p-8'}> | ||||
|         <div onClick={() => onClose()} className={'absolute top-4 right-4'}> | ||||
|           <button className={'block h-8 w-8 rounded-lg text-shade-2 hover:bg-main-secondary'}> | ||||
|             <CloseSvg></CloseSvg> | ||||
|           </button> | ||||
|         </div> | ||||
|         <div className={'flex flex-col gap-4'}> | ||||
|           {cells.map((cell, cellIndex) => ( | ||||
|             <EditBoardCell | ||||
|               key={cellIndex} | ||||
|               cellIdentifier={cell.cellIdentifier} | ||||
|               cellCache={controller.databaseViewCache.getRowCache().getCellCache()} | ||||
|               fieldController={controller.fieldController} | ||||
|             ></EditBoardCell> | ||||
|           ))} | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   ); | ||||
| }; | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 ascarbek
						ascarbek