0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2024-12-30 20:33:54 -05:00

Merge pull request #4772 from logto-io/gao-improve-org-settings-page

refactor(console): improve org settings page
This commit is contained in:
Gao Sun 2023-10-28 01:41:44 +08:00 committed by GitHub
commit d9a469dee3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 45 additions and 34 deletions

View file

@ -20,7 +20,7 @@
justify-content: flex-start; justify-content: flex-start;
flex-wrap: wrap; flex-wrap: wrap;
gap: _.unit(2); gap: _.unit(2);
padding: _.unit(2) _.unit(3); padding: _.unit(1.5) _.unit(3);
cursor: text; cursor: text;
.tag { .tag {

View file

@ -110,7 +110,7 @@ function RoleModal({ isOpen, editData, onClose }: Props) {
</FormField> </FormField>
<FormField title="general.description"> <FormField title="general.description">
<TextInput <TextInput
placeholder="organizations.create_role_placeholder" placeholder={t('organizations.create_role_placeholder')}
error={Boolean(errors.description)} error={Boolean(errors.description)}
{...register('description')} {...register('description')}
/> />

View file

@ -7,3 +7,7 @@
.table { .table {
margin-top: _.unit(3); margin-top: _.unit(3);
} }
.spinner {
margin: _.unit(2) 0;
}

View file

@ -4,6 +4,7 @@ import CirclePlus from '@/assets/icons/circle-plus.svg';
import Plus from '@/assets/icons/plus.svg'; import Plus from '@/assets/icons/plus.svg';
import EmptyDataPlaceholder from '@/components/EmptyDataPlaceholder'; import EmptyDataPlaceholder from '@/components/EmptyDataPlaceholder';
import Button from '@/ds-components/Button'; import Button from '@/ds-components/Button';
import { Ring as Spinner } from '@/ds-components/Spinner';
import Table from '@/ds-components/Table'; import Table from '@/ds-components/Table';
import { type Column } from '@/ds-components/Table/types'; import { type Column } from '@/ds-components/Table/types';
@ -39,10 +40,15 @@ function TemplateTable<
isLoading, isLoading,
onPageChange, onPageChange,
}: Props<TFieldValues, TName>) { }: Props<TFieldValues, TName>) {
const hasData = data.length > 0; const hasData = !isLoading && data.length > 0;
if (isLoading) {
<Spinner className={styles.spinner} />;
}
return ( return (
<> <>
{hasData && (
<Table <Table
hasBorder hasBorder
placeholder={<EmptyDataPlaceholder />} placeholder={<EmptyDataPlaceholder />}
@ -73,6 +79,7 @@ function TemplateTable<
/> />
} }
/> />
)}
{onAdd && !hasData && ( {onAdd && !hasData && (
<Button <Button
className={styles.addButton} className={styles.addButton}

View file

@ -310,7 +310,7 @@ export default class SchemaRouter<
`/:id/${pathname}`, `/:id/${pathname}`,
koaGuard({ koaGuard({
params: z.object({ id: z.string().min(1) }), params: z.object({ id: z.string().min(1) }),
body: z.object({ [columns.relationSchemaIds]: z.string().min(1).array().nonempty() }), body: z.object({ [columns.relationSchemaIds]: z.string().min(1).array() }),
status: [204, 422], status: [204, 422],
}), }),
async (ctx, next) => { async (ctx, next) => {