fix: display admin and inactive when view

This commit is contained in:
jialin
2025-11-12 16:11:17 +08:00
parent 653ada5f0f
commit 2045bfaf78
7 changed files with 63 additions and 24 deletions
+10
View File
@@ -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(() => { useEffect(() => {
return () => { return () => {
instanceRef.current?.destroy?.(); instanceRef.current?.destroy?.();
@@ -254,6 +263,7 @@ export default function useOverlayScroller(data?: {
scrollEventElement: scrollEventElement, scrollEventElement: scrollEventElement,
initialized: initialized.current, initialized: initialized.current,
getScrollElementScrollableHeight, getScrollElementScrollableHeight,
getScrollElement,
generateInstance, generateInstance,
destroyInstance: destroyInstance, destroyInstance: destroyInstance,
updateScrollerPosition: throttledUpdateScrollerPosition, updateScrollerPosition: throttledUpdateScrollerPosition,
@@ -28,6 +28,7 @@ const ColumnWrapper: React.FC<ColumnWrapperProps> = ({
scrollEventElement, scrollEventElement,
scrollToBottom, scrollToBottom,
scrollToTarget, scrollToTarget,
getScrollElement,
getScrollElementScrollableHeight getScrollElementScrollableHeight
} = useOverlayScroller({ } = useOverlayScroller({
options: { options: {
@@ -49,6 +50,7 @@ const ColumnWrapper: React.FC<ColumnWrapperProps> = ({
scroller: scroller, scroller: scroller,
osInstance: instance, osInstance: instance,
scrollEventElement, scrollEventElement,
getScrollElement,
getScrollElementScrollableHeight, getScrollElementScrollableHeight,
scrollToBottom, scrollToBottom,
scrollToTarget scrollToTarget
@@ -11,6 +11,7 @@ interface WrapperContextProps {
scrollTop: number; scrollTop: number;
}; };
scrollToTarget?: (target: any, offset?: number) => void; scrollToTarget?: (target: any, offset?: number) => void;
getScrollElement?: () => HTMLElement | null;
} }
export const WrapperContext = createContext<WrapperContextProps>( export const WrapperContext = createContext<WrapperContextProps>(
@@ -75,8 +75,10 @@ const AccessControlForm = forwardRef((props: AccessControlFormProps, ref) => {
})); }));
setTotalPages(res.pagination.totalPage); setTotalPages(res.pagination.totalPage);
setUserList(options); setUserList(options);
return options;
} catch (error) { } catch (error) {
setUserList([]); 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, () => ({ useImperativeHandle(ref, () => ({
submit: () => { submit: () => {
form.submit(); form.submit();
@@ -134,20 +128,43 @@ const AccessControlForm = forwardRef((props: AccessControlFormProps, ref) => {
})); }));
useEffect(() => { useEffect(() => {
if (currentData?.id) { const init = async () => {
queryModelAccessUserList(currentData.id).then((res) => { const allusers = await getUserList(queryParams);
const keys = res.items.map((item) => item.id); const userMap = new Map(allusers.map((u) => [u.key, u]));
setTargetKeys(keys);
form.setFieldsValue({ if (currentData?.id) {
access_policy: currentData.access_policy, queryModelAccessUserList(currentData.id).then((res) => {
users: res.items.map((item) => ({ id: item.id })) 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<string>();
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 {
} else { setTargetKeys([]);
setTargetKeys([]); form.setFieldsValue({ users: [] });
form.setFieldsValue({ users: [] }); }
} };
getUserList(queryParams); init();
}, [currentData?.id]); }, [currentData?.id]);
const renderFilterDropdown = () => { const renderFilterDropdown = () => {
@@ -451,7 +451,6 @@ const AddModal: FC<AddModalProps> = (props) => {
]); ]);
if (props.deploymentType === 'modelFiles') { if (props.deploymentType === 'modelFiles') {
clearCacheFormValues();
form.current?.form?.setFieldsValue({ form.current?.form?.setFieldsValue({
...props.initialValues ...props.initialValues
}); });
+9 -1
View File
@@ -101,7 +101,12 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
onValuesChange, onValuesChange,
onOk onOk
} = props; } = props;
const { getScrollElementScrollableHeight } = useWrapperContext(); const {
getScrollElementScrollableHeight,
getScrollElement,
osInstance,
scrollEventElement
} = useWrapperContext();
const { backendOptions, getBackendOptions } = useQueryBackends(); const { backendOptions, getBackendOptions } = useQueryBackends();
const { getGPUOptionList, gpuOptions, workerLabelOptions } = const { getGPUOptionList, gpuOptions, workerLabelOptions } =
useGenerateGPUOptions(); useGenerateGPUOptions();
@@ -111,6 +116,8 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
const scheduleType = Form.useWatch('scheduleType', form); const scheduleType = Form.useWatch('scheduleType', form);
const [target, setTarget] = React.useState<string>(TABKeysMap.BASIC); const [target, setTarget] = React.useState<string>(TABKeysMap.BASIC);
console.log('scroller instance in form:', osInstance, scrollEventElement);
const segmentOptions = [ const segmentOptions = [
{ {
value: TABKeysMap.BASIC, value: TABKeysMap.BASIC,
@@ -162,6 +169,7 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
setActiveKey, setActiveKey,
segmentOptions, segmentOptions,
segmentedTop: segmentedTop, segmentedTop: segmentedTop,
getScrollElement,
getScrollElementScrollableHeight: getScrollElementScrollableHeight getScrollElementScrollableHeight: getScrollElementScrollableHeight
}); });
+3 -1
View File
@@ -15,7 +15,8 @@ export default function useScrollAfterExpand({
segmentOptions, segmentOptions,
defaultWait = 300, defaultWait = 300,
segmentedTop = { top: 0, offsetTop: 96 }, segmentedTop = { top: 0, offsetTop: 96 },
getScrollElementScrollableHeight getScrollElementScrollableHeight,
getScrollElement
}: { }: {
form: any; form: any;
activeKey: string[]; activeKey: string[];
@@ -25,6 +26,7 @@ export default function useScrollAfterExpand({
scrollHeight: number; scrollHeight: number;
scrollTop: number; scrollTop: number;
}; };
getScrollElement?: () => HTMLElement | null;
defaultWait?: number; defaultWait?: number;
segmentedTop: { segmentedTop: {
top: number; top: number;