import { CellIdentifier } from '@/appflowy_app/stores/effects/database/cell/cell_bd_svc'; import { DatabaseController } from '@/appflowy_app/stores/effects/database/database_controller'; import { TypeOptionController } from '@/appflowy_app/stores/effects/database/field/type_option/type_option_controller'; import { FieldType } from '@/services/backend'; import { useState, useRef } from 'react'; import { Some } from 'ts-results'; import { ChangeFieldTypePopup } from '../../_shared/EditRow/ChangeFieldTypePopup'; import { EditFieldPopup } from '../../_shared/EditRow/EditFieldPopup'; import { ChecklistTypeSvg } from '../../_shared/svg/ChecklistTypeSvg'; import { DateTypeSvg } from '../../_shared/svg/DateTypeSvg'; import { MultiSelectTypeSvg } from '../../_shared/svg/MultiSelectTypeSvg'; import { NumberTypeSvg } from '../../_shared/svg/NumberTypeSvg'; import { SingleSelectTypeSvg } from '../../_shared/svg/SingleSelectTypeSvg'; import { TextTypeSvg } from '../../_shared/svg/TextTypeSvg'; import { UrlTypeSvg } from '../../_shared/svg/UrlTypeSvg'; export const GridTableHeaderItem = ({ controller, field, }: { controller: DatabaseController; field: { fieldId: string; name: string; fieldType: FieldType; }; }) => { const [showFieldEditor, setShowFieldEditor] = useState(false); const [editFieldTop, setEditFieldTop] = useState(0); const [editFieldRight, setEditFieldRight] = useState(0); const [showChangeFieldTypePopup, setShowChangeFieldTypePopup] = useState(false); const [changeFieldTypeTop, setChangeFieldTypeTop] = useState(0); const [changeFieldTypeRight, setChangeFieldTypeRight] = useState(0); const [editingField, setEditingField] = useState<{ fieldId: string; name: string; fieldType: FieldType; } | null>(null); const ref = useRef(null); const changeFieldType = async (newType: FieldType) => { if (!editingField) return; const currentField = controller.fieldController.getField(editingField.fieldId); if (!currentField) return; const typeOptionController = new TypeOptionController(controller.viewId, Some(currentField)); await typeOptionController.switchToField(newType); setEditingField({ ...editingField, fieldType: newType, }); setShowChangeFieldTypePopup(false); }; return (
{ if (!ref.current) return; const { top, left } = ref.current.getBoundingClientRect(); setEditFieldRight(left - 10); setEditFieldTop(top + 35); setEditingField(field); setShowFieldEditor(true); }} > {field.fieldType === FieldType.RichText && } {field.fieldType === FieldType.Number && } {field.fieldType === FieldType.DateTime && } {field.fieldType === FieldType.SingleSelect && } {field.fieldType === FieldType.MultiSelect && } {field.fieldType === FieldType.Checklist && } {field.fieldType === FieldType.Checkbox && } {field.fieldType === FieldType.URL && } {field.name} {showFieldEditor && editingField && ( { setShowFieldEditor(false); }} fieldInfo={controller.fieldController.getField(editingField.fieldId)} changeFieldTypeClick={(buttonTop, buttonRight) => { setChangeFieldTypeTop(buttonTop); setChangeFieldTypeRight(buttonRight); setShowChangeFieldTypePopup(true); }} > )} {showChangeFieldTypePopup && ( changeFieldType(newType)} onOutsideClick={() => setShowChangeFieldTypePopup(false)} > )}
); };