diff --git a/src/hooks/use-overlay-scroller.ts b/src/hooks/use-overlay-scroller.ts index ac72312b..50edcd10 100644 --- a/src/hooks/use-overlay-scroller.ts +++ b/src/hooks/use-overlay-scroller.ts @@ -241,6 +241,15 @@ export default function useOverlayScroller(data?: { }; }; + const getScrollElement = () => { + if (!instanceRef.current || !scrollEventElement.current) { + instanceRef.current = instance?.(); + scrollEventElement.current = + instanceRef.current?.elements()?.scrollEventElement; + } + return scrollEventElement; + }; + useEffect(() => { return () => { instanceRef.current?.destroy?.(); @@ -254,6 +263,7 @@ export default function useOverlayScroller(data?: { scrollEventElement: scrollEventElement, initialized: initialized.current, getScrollElementScrollableHeight, + getScrollElement, generateInstance, destroyInstance: destroyInstance, updateScrollerPosition: throttledUpdateScrollerPosition, diff --git a/src/pages/_components/column-wrapper/index.tsx b/src/pages/_components/column-wrapper/index.tsx index 93642362..451f3e43 100644 --- a/src/pages/_components/column-wrapper/index.tsx +++ b/src/pages/_components/column-wrapper/index.tsx @@ -28,6 +28,7 @@ const ColumnWrapper: React.FC = ({ scrollEventElement, scrollToBottom, scrollToTarget, + getScrollElement, getScrollElementScrollableHeight } = useOverlayScroller({ options: { @@ -49,6 +50,7 @@ const ColumnWrapper: React.FC = ({ scroller: scroller, osInstance: instance, scrollEventElement, + getScrollElement, getScrollElementScrollableHeight, scrollToBottom, scrollToTarget diff --git a/src/pages/_components/column-wrapper/use-wrapper-context.ts b/src/pages/_components/column-wrapper/use-wrapper-context.ts index dc063bb3..50d62bae 100644 --- a/src/pages/_components/column-wrapper/use-wrapper-context.ts +++ b/src/pages/_components/column-wrapper/use-wrapper-context.ts @@ -11,6 +11,7 @@ interface WrapperContextProps { scrollTop: number; }; scrollToTarget?: (target: any, offset?: number) => void; + getScrollElement?: () => HTMLElement | null; } export const WrapperContext = createContext( diff --git a/src/pages/llmodels/components/access-control-modal/form.tsx b/src/pages/llmodels/components/access-control-modal/form.tsx index 93e7a8da..eecc015b 100644 --- a/src/pages/llmodels/components/access-control-modal/form.tsx +++ b/src/pages/llmodels/components/access-control-modal/form.tsx @@ -75,8 +75,10 @@ const AccessControlForm = forwardRef((props: AccessControlFormProps, ref) => { })); setTotalPages(res.pagination.totalPage); setUserList(options); + return options; } catch (error) { setUserList([]); + return []; } }; @@ -110,14 +112,6 @@ const AccessControlForm = forwardRef((props: AccessControlFormProps, ref) => { } }; - const handleFilterChange = (e: any) => { - if (e.target.checked) { - setFilterInUsers(new Set(['admin', 'inactive'])); - } else { - setFilterInUsers(new Set()); - } - }; - useImperativeHandle(ref, () => ({ submit: () => { form.submit(); @@ -134,20 +128,43 @@ const AccessControlForm = forwardRef((props: AccessControlFormProps, ref) => { })); useEffect(() => { - if (currentData?.id) { - queryModelAccessUserList(currentData.id).then((res) => { - const keys = res.items.map((item) => item.id); - setTargetKeys(keys); - form.setFieldsValue({ - access_policy: currentData.access_policy, - users: res.items.map((item) => ({ id: item.id })) + const init = async () => { + const allusers = await getUserList(queryParams); + const userMap = new Map(allusers.map((u) => [u.key, u])); + + if (currentData?.id) { + queryModelAccessUserList(currentData.id).then((res) => { + const keys = res.items.map((item) => item.id); + setTargetKeys(keys); + + let hasAdmin = false; + let hasInactive = false; + + for (const key of keys) { + const user = userMap.get(key); + if (!user) continue; + if (user.is_admin) hasAdmin = true; + if (!user.is_active) hasInactive = true; + if (hasAdmin && hasInactive) break; + } + + const filterSet = new Set(); + if (hasAdmin) filterSet.add('admin'); + if (hasInactive) filterSet.add('inactive'); + + setFilterInUsers(filterSet); + + form.setFieldsValue({ + access_policy: currentData.access_policy, + users: res.items.map((item) => ({ id: item.id })) + }); }); - }); - } else { - setTargetKeys([]); - form.setFieldsValue({ users: [] }); - } - getUserList(queryParams); + } else { + setTargetKeys([]); + form.setFieldsValue({ users: [] }); + } + }; + init(); }, [currentData?.id]); const renderFilterDropdown = () => { diff --git a/src/pages/llmodels/components/deploy-modal.tsx b/src/pages/llmodels/components/deploy-modal.tsx index 4377ee23..8921f6b2 100644 --- a/src/pages/llmodels/components/deploy-modal.tsx +++ b/src/pages/llmodels/components/deploy-modal.tsx @@ -451,7 +451,6 @@ const AddModal: FC = (props) => { ]); if (props.deploymentType === 'modelFiles') { - clearCacheFormValues(); form.current?.form?.setFieldsValue({ ...props.initialValues }); diff --git a/src/pages/llmodels/forms/index.tsx b/src/pages/llmodels/forms/index.tsx index bac42a09..e3ce2186 100644 --- a/src/pages/llmodels/forms/index.tsx +++ b/src/pages/llmodels/forms/index.tsx @@ -101,7 +101,12 @@ const DataForm: React.FC = forwardRef((props, ref) => { onValuesChange, onOk } = props; - const { getScrollElementScrollableHeight } = useWrapperContext(); + const { + getScrollElementScrollableHeight, + getScrollElement, + osInstance, + scrollEventElement + } = useWrapperContext(); const { backendOptions, getBackendOptions } = useQueryBackends(); const { getGPUOptionList, gpuOptions, workerLabelOptions } = useGenerateGPUOptions(); @@ -111,6 +116,8 @@ const DataForm: React.FC = forwardRef((props, ref) => { const scheduleType = Form.useWatch('scheduleType', form); const [target, setTarget] = React.useState(TABKeysMap.BASIC); + console.log('scroller instance in form:', osInstance, scrollEventElement); + const segmentOptions = [ { value: TABKeysMap.BASIC, @@ -162,6 +169,7 @@ const DataForm: React.FC = forwardRef((props, ref) => { setActiveKey, segmentOptions, segmentedTop: segmentedTop, + getScrollElement, getScrollElementScrollableHeight: getScrollElementScrollableHeight }); diff --git a/src/pages/llmodels/hooks/use-field-scroll.ts b/src/pages/llmodels/hooks/use-field-scroll.ts index f28ca18c..e1f54754 100644 --- a/src/pages/llmodels/hooks/use-field-scroll.ts +++ b/src/pages/llmodels/hooks/use-field-scroll.ts @@ -15,7 +15,8 @@ export default function useScrollAfterExpand({ segmentOptions, defaultWait = 300, segmentedTop = { top: 0, offsetTop: 96 }, - getScrollElementScrollableHeight + getScrollElementScrollableHeight, + getScrollElement }: { form: any; activeKey: string[]; @@ -25,6 +26,7 @@ export default function useScrollAfterExpand({ scrollHeight: number; scrollTop: number; }; + getScrollElement?: () => HTMLElement | null; defaultWait?: number; segmentedTop: { top: number;