/** * This file is part of the NocoBase (R) project. * Copyright (c) 2020-2024 NocoBase Co., Ltd. * Authors: NocoBase Team. * * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. * For more information, please refer to: https://www.nocobase.com/agreement. */ import { RecursionField, connect, mapReadPretty, useField, useFieldSchema } from '@formily/react'; import React, { useContext, useEffect, useState } from 'react'; import { FormProvider, RecordPickerContext, RecordPickerProvider, SchemaComponentOptions, useActionContext, TableSelectorParamsProvider, useTableSelectorProps as useTsp, EllipsisWithTooltip, CollectionProvider_deprecated, useCollection_deprecated, useCollectionManager_deprecated, Upload, useFieldNames, ActionContextProvider, AssociationField, Input, } from '@nocobase/client'; import schema from '../schema'; import { useInsertSchema } from '../hook'; const defaultToValueItem = (data) => { return data?.thumbnailRule ? `${data?.url}${data?.thumbnailRule}` : data?.url; }; const InnerAttachmentUrl = (props) => { const { value, onChange, toValueItem = defaultToValueItem, disabled, underFilter, ...others } = props; const fieldSchema = useFieldSchema(); const [visibleSelector, setVisibleSelector] = useState(false); const [selectedRows, setSelectedRows] = useState([]); const insertSelector = useInsertSchema('Selector'); const fieldNames = useFieldNames(props); const field: any = useField(); const [options, setOptions] = useState(); const { getField } = useCollection_deprecated(); const collectionField = getField(field.props.name); const { modalProps } = useActionContext(); const handleSelect = (ev) => { ev.stopPropagation(); ev.preventDefault(); insertSelector(schema.Selector); setVisibleSelector(true); setSelectedRows([]); }; useEffect(() => { if (value && Object.keys(value).length > 0) { setOptions(value); } else { setOptions(null); } }, [value, fieldNames?.label]); const pickerProps = { size: 'small', fieldNames, multiple: false, association: { target: collectionField?.target, }, options, onChange: props?.onChange, selectedRows, setSelectedRows, collectionField, }; const usePickActionProps = () => { const { setVisible } = useActionContext(); const { selectedRows, onChange } = useContext(RecordPickerContext); return { onClick() { onChange(toValueItem(selectedRows?.[0]) || null); setVisible(false); }, }; }; const useTableSelectorProps = () => { const { multiple, options, setSelectedRows, selectedRows: rcSelectRows = [], onChange, } = useContext(RecordPickerContext); const { onRowSelectionChange, rowKey = 'id', ...others } = useTsp(); const { setVisible } = useActionContext(); return { ...others, rowKey, rowSelection: { type: multiple ? 'checkbox' : 'radio', selectedRowKeys: rcSelectRows?.filter((item) => options?.[rowKey] !== item[rowKey]).map((item) => item[rowKey]), }, onRowSelectionChange(selectedRowKeys, selectedRows) { setSelectedRows?.(selectedRows); onRowSelectionChange?.(selectedRowKeys, selectedRows); onChange(toValueItem(selectedRows?.[0]) || null); setVisible(false); }, }; }; if (underFilter) { return ; } return (