This is an automated email from the ASF dual-hosted git repository.

lauraxia pushed a commit to branch antdUI-gravitino-base1.1.0
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/antdUI-gravitino-base1.1.0 by 
this push:
     new 2f4ce92d1f [#9628][#9639][#9640][#9641][#9642][#9644][#9645][#9646] 
fix table related issue and drop template and fileset/model name issue
2f4ce92d1f is described below

commit 2f4ce92d1fb7df2ce06555cf4b3086589c3897a7
Author: Qian Xia <[email protected]>
AuthorDate: Thu Jan 8 18:13:03 2026 +0800

    [#9628][#9639][#9640][#9641][#9642][#9644][#9645][#9646] fix table related 
issue and drop template and fileset/model name issue
---
 conf/gravitino.conf.template                       |   1 +
 .../catalogs/rightContent/CreateFilesetDialog.js   |   7 +-
 .../app/catalogs/rightContent/CreateTableDialog.js |   9 +-
 .../catalogs/rightContent/RegisterModelDialog.js   |   2 +-
 .../entitiesContent/ModelDetailsPage.js            |   1 +
 .../entitiesContent/TableDetailsPage.js            |   7 +-
 web/web/src/app/jobTemplates/page.js               |   4 +-
 web/web/src/app/jobs/RegisterJobTemplateDialog.js  |   4 +-
 web/web/src/app/login/components/DefaultLogin.js   |   2 +-
 web/web/src/app/login/page.js                      |   4 +
 web/web/src/app/metalakes/page.js                  |   2 +-
 .../src/appOld/login/components/DefaultLogin.js    | 223 ++++++++++++---------
 .../appOld/login/components/defaultLoginSchema.js  |  48 +++++
 web/web/src/appOld/login/page.js                   |   2 +-
 web/web/src/appOld/rootLayout/Logout.js            |  14 +-
 web/web/src/lib/store/metalakes/index.js           |  26 ++-
 web/web/src/lib/utils/index.js                     |   4 +-
 17 files changed, 239 insertions(+), 121 deletions(-)

diff --git a/conf/gravitino.conf.template b/conf/gravitino.conf.template
index 029e1d2121..9e340f5a6e 100644
--- a/conf/gravitino.conf.template
+++ b/conf/gravitino.conf.template
@@ -78,6 +78,7 @@ gravitino.cache.implementation = caffeine
 # Whether Gravitino enable authorization or not
 gravitino.authorization.enable = false
 # The admins of Gravitino service, multiple admins are spitted by comma.
+gravitino.server.visibleConfigs=gravitino.authorization.serviceAdmins
 gravitino.authorization.serviceAdmins = anonymous
 
 # THE CONFIGURATION FOR AUXILIARY SERVICE
diff --git a/web/web/src/app/catalogs/rightContent/CreateFilesetDialog.js 
b/web/web/src/app/catalogs/rightContent/CreateFilesetDialog.js
index 41693a5c99..561cbe61bf 100644
--- a/web/web/src/app/catalogs/rightContent/CreateFilesetDialog.js
+++ b/web/web/src/app/catalogs/rightContent/CreateFilesetDialog.js
@@ -141,9 +141,6 @@ export default function CreateFilesetDialog({ ...props }) {
     }
   }, [open, editFileset, metalake, catalog, schema])
 
-  // const { trigger: submitFileset, isMutating } = useCreateFilesetAsync()
-  // const { trigger: updateFileset, isMutating: isUpdateMutating } = 
useUpdateFilesetAsync()
-
   const handleSubmit = e => {
     e.preventDefault()
     form
@@ -185,7 +182,7 @@ export default function CreateFilesetDialog({ ...props }) {
         } else {
           await dispatch(createFileset({ data: submitData, metalake, catalog, 
catalogType, schema }))
         }
-        !editFileset && treeRef.current.onLoadData({ key: 
`${catalog}/${schema}`, nodeType: 'schema' })
+        treeRef.current.onLoadData({ key: `${catalog}/${schema}`, nodeType: 
'schema' })
         setConfirmLoading(false)
         setOpen(false)
       })
@@ -250,7 +247,7 @@ export default function CreateFilesetDialog({ ...props }) {
                   label='Fileset Name'
                   rules={[{ required: true }, { type: 'string', max: 64 }, { 
pattern: new RegExp(nameRegex) }]}
                 >
-                  <Input data-refer='fileset-name-field' 
placeholder={mismatchName} disabled={!init} />
+                  <Input data-refer='fileset-name-field' 
placeholder={mismatchName} disabled={init} />
                 </Form.Item>
                 <Form.Item
                   name='type'
diff --git a/web/web/src/app/catalogs/rightContent/CreateTableDialog.js 
b/web/web/src/app/catalogs/rightContent/CreateTableDialog.js
index 0ea3d438b0..3d0bdfeee7 100644
--- a/web/web/src/app/catalogs/rightContent/CreateTableDialog.js
+++ b/web/web/src/app/catalogs/rightContent/CreateTableDialog.js
@@ -375,7 +375,7 @@ export default function CreateTableDialog({ ...props }) {
                   default:
                     form.setFieldValue(
                       ['columns', key, 'typeObj', 'type'],
-                      capitalizeFirstLetter(table.columns[key].type)
+                      capitalizeFirstLetter(table.columns[key].type?.type)
                     )
                 }
               }
@@ -397,6 +397,7 @@ export default function CreateTableDialog({ ...props }) {
                 const fields = item.fieldName || item.fieldNames.map(f => f[0])
                 form.setFieldValue(['partitions', idxPartiton, 'strategy'], 
item.strategy)
                 form.setFieldValue(['partitions', idxPartiton, 'fieldName'], 
fields)
+                form.setFieldValue(['partitions', idxPartiton, 'number'], 
item.width || item.number)
                 idxPartiton++
               })
             }
@@ -405,11 +406,17 @@ export default function CreateTableDialog({ ...props }) {
               table.sortOrders.forEach(item => {
                 const strategy = item.sortTerm?.type === 'field' ? 'field' : 
item.sortTerm?.funcName
 
+                const number =
+                  item.sortTerm?.type === 'function'
+                    ? item.sortTerm?.funcArgs.find(f => f.type === 
'literal')?.value
+                    : undefined
+
                 const fieldName =
                   item.sortTerm?.type === 'field'
                     ? item.sortTerm.fieldName[0]
                     : item.sortTerm?.funcArgs.find(f => 
f.fieldName)?.fieldName[0]
                 form.setFieldValue(['sortOrders', idxSortOrder, 'strategy'], 
strategy)
+                form.setFieldValue(['sortOrders', idxSortOrder, 'number'], 
number)
                 form.setFieldValue(['sortOrders', idxSortOrder, 'fieldName'], 
fieldName)
                 form.setFieldValue(['sortOrders', idxSortOrder, 'direction'], 
item.direction)
                 form.setFieldValue(['sortOrders', idxSortOrder, 
'nullOrdering'], item.nullOrdering)
diff --git a/web/web/src/app/catalogs/rightContent/RegisterModelDialog.js 
b/web/web/src/app/catalogs/rightContent/RegisterModelDialog.js
index 5e4dd910e2..817395c019 100644
--- a/web/web/src/app/catalogs/rightContent/RegisterModelDialog.js
+++ b/web/web/src/app/catalogs/rightContent/RegisterModelDialog.js
@@ -191,7 +191,7 @@ export default function RegisterModelDialog({ ...props }) {
                   label='Model Name'
                   rules={[{ required: true }, { type: 'string', max: 64 }, { 
pattern: new RegExp(nameRegex) }]}
                 >
-                  <Input placeholder={mismatchName} disabled={!init} />
+                  <Input placeholder={mismatchName} disabled={init} />
                 </Form.Item>
                 <Form.Item name='comment' label='Comment'>
                   <TextArea />
diff --git 
a/web/web/src/app/catalogs/rightContent/entitiesContent/ModelDetailsPage.js 
b/web/web/src/app/catalogs/rightContent/entitiesContent/ModelDetailsPage.js
index edea952810..ec777e2cad 100644
--- a/web/web/src/app/catalogs/rightContent/entitiesContent/ModelDetailsPage.js
+++ b/web/web/src/app/catalogs/rightContent/entitiesContent/ModelDetailsPage.js
@@ -491,6 +491,7 @@ export default function ModelDetailsPage({ ...props }) {
           catalog={catalog}
           schema={schema}
           editModel={model}
+          init={true}
         />
       )}
       {openOwner && (
diff --git 
a/web/web/src/app/catalogs/rightContent/entitiesContent/TableDetailsPage.js 
b/web/web/src/app/catalogs/rightContent/entitiesContent/TableDetailsPage.js
index f0fd398689..cde4b05c28 100644
--- a/web/web/src/app/catalogs/rightContent/entitiesContent/TableDetailsPage.js
+++ b/web/web/src/app/catalogs/rightContent/entitiesContent/TableDetailsPage.js
@@ -205,12 +205,15 @@ export default function TableDetailsPage({ ...props }) {
   })
 
   const sortOrders = store.activatedDetails?.sortOrders?.map((i, index) => {
+    const fields =
+      i.sortTerm?.type === 'field' ? i.sortTerm.fieldName : 
i.sortTerm?.funcArgs.find(f => f.fieldName)?.fieldName
+
     return {
       key: index,
-      fields: i.sortTerm.fieldName,
+      fields: fields,
       dir: i.direction,
       no: i.nullOrdering,
-      text: `${i.sortTerm.fieldName[0]} ${i.direction} ${i.nullOrdering}`
+      text: `${fields[0]} ${i.direction} ${i.nullOrdering}`
     }
   })
 
diff --git a/web/web/src/app/jobTemplates/page.js 
b/web/web/src/app/jobTemplates/page.js
index 1f4d02b91b..d9c3caa73d 100644
--- a/web/web/src/app/jobTemplates/page.js
+++ b/web/web/src/app/jobTemplates/page.js
@@ -120,7 +120,7 @@ export default function JobTemplatesPage() {
     }
 
     modal.confirm({
-      title: `Are you sure to cancel the Job Template ${jobTemplateName}?`,
+      title: `Are you sure to cancel the Job Template ${jobTemplate}?`,
       icon: <ExclamationCircleFilled />,
       content: (
         <NameContext.Consumer>
@@ -128,7 +128,7 @@ export default function JobTemplatesPage() {
             <ConfirmInput
               name={name}
               type={type}
-              confirmTips={`Please enter \"${jobTemplateName}\" to confirm 
deletion!`}
+              confirmTips={`Please enter \"${jobTemplate}\" to confirm 
deletion!`}
               notMatchTips={`The entered name does not match the job template 
name`}
               setConfirmInput={setConfirmInput}
               registerValidate={registerValidate}
diff --git a/web/web/src/app/jobs/RegisterJobTemplateDialog.js 
b/web/web/src/app/jobs/RegisterJobTemplateDialog.js
index 5ddb051bf1..e1d7f31fe1 100644
--- a/web/web/src/app/jobs/RegisterJobTemplateDialog.js
+++ b/web/web/src/app/jobs/RegisterJobTemplateDialog.js
@@ -377,7 +377,7 @@ export default function RegisterJobTemplateDialog({ 
...props }) {
                                     <Form.Item
                                       {...restField}
                                       name={[name, 'configName']}
-                                      rules={[{ required: true, message: 
t('job.thConfigNameRequired') }]}
+                                      rules={[{ required: true, message: 
'Please input config name!' }]}
                                       className='mb-0 w-full grow'
                                     >
                                       <Input placeholder='Config Name' />
@@ -385,7 +385,7 @@ export default function RegisterJobTemplateDialog({ 
...props }) {
                                     <Form.Item
                                       {...restField}
                                       name={[name, 'configValue']}
-                                      rules={[{ required: true, message: 
t('job.thConfigValueRequired') }]}
+                                      rules={[{ required: true, message: 
'Please input config value!' }]}
                                       className='mb-0 w-full grow'
                                     >
                                       <Input placeholder='Config Value' />
diff --git a/web/web/src/app/login/components/DefaultLogin.js 
b/web/web/src/app/login/components/DefaultLogin.js
index b317c31a29..fe29c01143 100644
--- a/web/web/src/app/login/components/DefaultLogin.js
+++ b/web/web/src/app/login/components/DefaultLogin.js
@@ -64,7 +64,7 @@ function DefaultLogin() {
       {store.authType === 'simple' && store.anthEnable ? (
         <>
           <Form.Item label='Username' name='username' rules={[{ required: 
true, message: 'Username is required' }]}>
-            <Input placeholder='' />
+            <Input placeholder='Please enter your username' />
           </Form.Item>
         </>
       ) : (
diff --git a/web/web/src/app/login/page.js b/web/web/src/app/login/page.js
index cdfa29aec9..2abef50ed1 100644
--- a/web/web/src/app/login/page.js
+++ b/web/web/src/app/login/page.js
@@ -28,6 +28,8 @@ import { useEffect, useState } from 'react'
 import OidcLogin from './components/OidcLogin'
 import DefaultLogin from './components/DefaultLogin'
 import { oauthProviderFactory } from '@/lib/auth/providers/factory'
+import { resetMetalakeStore } from '@/lib/store/metalakes'
+import { useAppDispatch } from '@/lib/hooks/useStore'
 
 const fonts = Roboto({ subsets: ['latin'], weight: ['400'], display: 'swap' })
 
@@ -35,6 +37,7 @@ const { Title } = Typography
 
 const LoginPage = () => {
   const [providerType, setProviderType] = useState(null)
+  const dispatch = useAppDispatch()
 
   useEffect(() => {
     const detectProviderType = async () => {
@@ -46,6 +49,7 @@ const LoginPage = () => {
       }
     }
 
+    dispatch(resetMetalakeStore())
     detectProviderType()
   }, [])
 
diff --git a/web/web/src/app/metalakes/page.js 
b/web/web/src/app/metalakes/page.js
index 651e900e8d..c863d726fa 100644
--- a/web/web/src/app/metalakes/page.js
+++ b/web/web/src/app/metalakes/page.js
@@ -378,7 +378,7 @@ const MetalakeList = () => {
               placeholder='Search...'
               onChange={onSearchTable}
             />
-            {([...(serviceAdmins || '').split(',')].includes(authUser?.name) 
|| !authUser) && (
+            {([...(serviceAdmins || '').split(',')].includes(authUser?.name) 
|| !anthEnable) && (
               <Button
                 data-refer='create-metalake-btn'
                 type='primary'
diff --git a/web/web/src/appOld/login/components/DefaultLogin.js 
b/web/web/src/appOld/login/components/DefaultLogin.js
index fd5ff0debf..2ee598a291 100644
--- a/web/web/src/appOld/login/components/DefaultLogin.js
+++ b/web/web/src/appOld/login/components/DefaultLogin.js
@@ -20,41 +20,31 @@
 'use client'
 
 import { useRouter } from 'next/navigation'
-import { useEffect } from 'react'
+import { useEffect, useMemo } from 'react'
 import { Grid, Button, Typography, TextField, FormControl, FormHelperText } 
from '@mui/material'
-import * as yup from 'yup'
 import { useForm, Controller } from 'react-hook-form'
 import { yupResolver } from '@hookform/resolvers/yup'
 
 import { useAppDispatch, useAppSelector } from '@/lib/hooks/useStore'
-import { loginAction, setIntervalIdAction, clearIntervalId } from 
'@/lib/store/auth'
-
-const defaultValues = {
-  grant_type: 'client_credentials',
-  client_id: '',
-  client_secret: '',
-  scope: ''
-}
-
-const schema = yup.object().shape({
-  grant_type: yup.string().required(),
-  client_id: yup.string().required(),
-  client_secret: yup.string().required(),
-  scope: yup.string().required()
-})
+import { loginAction, setIntervalIdAction, clearIntervalId, setAuthUser } from 
'@/lib/store/auth'
+import { DEFAULT_LOGIN_DEFAULT_VALUES, createDefaultLoginSchema } from 
'./defaultLoginSchema'
 
 function DefaultLogin() {
   const router = useRouter()
   const dispatch = useAppDispatch()
   const store = useAppSelector(state => state.auth)
 
+  const isSimpleAuth = store.authType === 'simple' && store.anthEnable
+
+  const schema = useMemo(() => createDefaultLoginSchema({ isSimpleAuth }), 
[isSimpleAuth])
+
   const {
     control,
     handleSubmit,
     reset,
     formState: { errors }
   } = useForm({
-    defaultValues: Object.assign({}, defaultValues),
+    defaultValues: Object.assign({}, DEFAULT_LOGIN_DEFAULT_VALUES),
     mode: 'onChange',
     resolver: yupResolver(schema)
   })
@@ -66,8 +56,13 @@ function DefaultLogin() {
   }, [store.intervalId])
 
   const onSubmit = async data => {
-    await dispatch(loginAction({ params: data, router }))
-    await dispatch(setIntervalIdAction())
+    if (isSimpleAuth) {
+      await dispatch(setAuthUser({ name: String(data.username || '').trim(), 
type: 'user' }))
+      router.push('/metalakes')
+    } else {
+      await dispatch(loginAction({ params: data, router }))
+      await dispatch(setIntervalIdAction())
+    }
 
     reset({ ...data })
   }
@@ -78,86 +73,120 @@ function DefaultLogin() {
 
   return (
     <form autoComplete='off' onSubmit={handleSubmit(onSubmit, onError)}>
-      <Grid item xs={12} sx={{ mt: 4 }}>
-        <FormControl fullWidth>
-          <Controller
-            name='grant_type'
-            control={control}
-            rules={{ required: true }}
-            render={({ field: { value, onChange } }) => (
-              <TextField
-                value={value}
-                label='Grant Type'
-                disabled
-                onChange={onChange}
-                placeholder=''
-                error={Boolean(errors.grant_type)}
-              />
+      {isSimpleAuth ? (
+        <Grid item xs={12} sx={{ mt: 4 }}>
+          <FormControl fullWidth>
+            <Controller
+              name='username'
+              control={control}
+              rules={{ required: true }}
+              render={({ field: { value, onChange } }) => (
+                <TextField
+                  value={value}
+                  label='Username'
+                  onChange={onChange}
+                  placeholder=''
+                  error={Boolean(errors.username)}
+                />
+              )}
+            />
+            {errors.username && (
+              <FormHelperText 
className={'twc-text-error-main'}>{errors.username.message}</FormHelperText>
             )}
-          />
-          {errors.grant_type && (
-            <FormHelperText 
className={'twc-text-error-main'}>{errors.grant_type.message}</FormHelperText>
-          )}
-        </FormControl>
-      </Grid>
-
-      <Grid item xs={12} sx={{ mt: 4 }}>
-        <FormControl fullWidth>
-          <Controller
-            name='client_id'
-            control={control}
-            rules={{ required: true }}
-            render={({ field: { value, onChange } }) => (
-              <TextField
-                value={value}
-                label='Client ID'
-                onChange={onChange}
-                placeholder=''
-                error={Boolean(errors.client_id)}
+          </FormControl>
+        </Grid>
+      ) : (
+        <>
+          <Grid item xs={12} sx={{ mt: 4 }}>
+            <FormControl fullWidth>
+              <Controller
+                name='grant_type'
+                control={control}
+                rules={{ required: true }}
+                render={({ field: { value, onChange } }) => (
+                  <TextField
+                    value={value}
+                    label='Grant Type'
+                    disabled
+                    onChange={onChange}
+                    placeholder=''
+                    error={Boolean(errors.grant_type)}
+                  />
+                )}
               />
-            )}
-          />
-          {errors.client_id && (
-            <FormHelperText 
className={'twc-text-error-main'}>{errors.client_id.message}</FormHelperText>
-          )}
-        </FormControl>
-      </Grid>
-
-      <Grid item xs={12} sx={{ mt: 4 }}>
-        <FormControl fullWidth>
-          <Controller
-            name='client_secret'
-            control={control}
-            rules={{ required: true }}
-            render={({ field: { value, onChange } }) => (
-              <TextField
-                value={value}
-                label='Client Secret'
-                onChange={onChange}
-                placeholder=''
-                error={Boolean(errors.client_secret)}
+              {errors.grant_type && (
+                <FormHelperText 
className={'twc-text-error-main'}>{errors.grant_type.message}</FormHelperText>
+              )}
+            </FormControl>
+          </Grid>
+
+          <Grid item xs={12} sx={{ mt: 4 }}>
+            <FormControl fullWidth>
+              <Controller
+                name='client_id'
+                control={control}
+                rules={{ required: true }}
+                render={({ field: { value, onChange } }) => (
+                  <TextField
+                    value={value}
+                    label='Client ID'
+                    onChange={onChange}
+                    placeholder=''
+                    error={Boolean(errors.client_id)}
+                  />
+                )}
               />
-            )}
-          />
-          {errors.client_secret && (
-            <FormHelperText 
className={'twc-text-error-main'}>{errors.client_secret.message}</FormHelperText>
-          )}
-        </FormControl>
-      </Grid>
-
-      <Grid item xs={12} sx={{ mt: 4 }}>
-        <FormControl fullWidth>
-          <Controller
-            name='scope'
-            control={control}
-            rules={{ required: true }}
-            render={({ field: { value, onChange } }) => (
-              <TextField value={value} label='Scope' onChange={onChange} 
placeholder='' error={Boolean(errors.scope)} />
-            )}
-          />
-          {errors.scope && <FormHelperText 
className={'twc-text-error-main'}>{errors.scope.message}</FormHelperText>}
-        </FormControl>
-      </Grid>
+              {errors.client_id && (
+                <FormHelperText 
className={'twc-text-error-main'}>{errors.client_id.message}</FormHelperText>
+              )}
+            </FormControl>
+          </Grid>
+
+          <Grid item xs={12} sx={{ mt: 4 }}>
+            <FormControl fullWidth>
+              <Controller
+                name='client_secret'
+                control={control}
+                rules={{ required: true }}
+                render={({ field: { value, onChange } }) => (
+                  <TextField
+                    value={value}
+                    label='Client Secret'
+                    onChange={onChange}
+                    placeholder=''
+                    error={Boolean(errors.client_secret)}
+                  />
+                )}
+              />
+              {errors.client_secret && (
+                <FormHelperText 
className={'twc-text-error-main'}>{errors.client_secret.message}</FormHelperText>
+              )}
+            </FormControl>
+          </Grid>
+
+          <Grid item xs={12} sx={{ mt: 4 }}>
+            <FormControl fullWidth>
+              <Controller
+                name='scope'
+                control={control}
+                rules={{ required: true }}
+                render={({ field: { value, onChange } }) => (
+                  <TextField
+                    value={value}
+                    label='Scope'
+                    onChange={onChange}
+                    placeholder=''
+                    error={Boolean(errors.scope)}
+                  />
+                )}
+              />
+              {errors.scope && (
+                <FormHelperText 
className={'twc-text-error-main'}>{errors.scope.message}</FormHelperText>
+              )}
+            </FormControl>
+          </Grid>
+        </>
+      )}
 
       <Button fullWidth size='large' type='submit' variant='contained' sx={{ 
mb: 7, mt: 12 }}>
         Login
diff --git a/web/web/src/appOld/login/components/defaultLoginSchema.js 
b/web/web/src/appOld/login/components/defaultLoginSchema.js
new file mode 100644
index 0000000000..43874d831f
--- /dev/null
+++ b/web/web/src/appOld/login/components/defaultLoginSchema.js
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import * as yup from 'yup'
+
+export const DEFAULT_LOGIN_DEFAULT_VALUES = {
+  grant_type: 'client_credentials',
+  client_id: '',
+  client_secret: '',
+  scope: '',
+  username: ''
+}
+
+export function createDefaultLoginSchema({ isSimpleAuth }) {
+  if (isSimpleAuth) {
+    return yup.object().shape({
+      username: yup.string().trim().required('Username is required'),
+      grant_type: yup.string().notRequired(),
+      client_id: yup.string().notRequired(),
+      client_secret: yup.string().notRequired(),
+      scope: yup.string().notRequired()
+    })
+  }
+
+  return yup.object().shape({
+    grant_type: yup.string().required(),
+    client_id: yup.string().required(),
+    client_secret: yup.string().required(),
+    scope: yup.string().required(),
+    username: yup.string().notRequired()
+  })
+}
diff --git a/web/web/src/appOld/login/page.js b/web/web/src/appOld/login/page.js
index f11a499b94..4dfdd93e35 100644
--- a/web/web/src/appOld/login/page.js
+++ b/web/web/src/appOld/login/page.js
@@ -57,7 +57,7 @@ const LoginPage = () => {
           <CardContent className='twc-p-12'>
             <Box className='twc-mb-8 twc-flex twc-items-center 
twc-justify-center'>
               <Image
-                src={`${process.env.NEXT_PUBLIC_BASE_PATH ?? 
''}/icons/gravitino.svg`}
+                src={`${process.env.NEXT_PUBLIC_BASE_PATH ?? 
''}/icons/gravitino_old.svg`}
                 width={24}
                 height={24}
                 alt='Gravitino Logo'
diff --git a/web/web/src/appOld/rootLayout/Logout.js 
b/web/web/src/appOld/rootLayout/Logout.js
index 1cca5ee49b..81803be302 100644
--- a/web/web/src/appOld/rootLayout/Logout.js
+++ b/web/web/src/appOld/rootLayout/Logout.js
@@ -22,7 +22,7 @@
 import { useRouter } from 'next/navigation'
 import { useState, useEffect } from 'react'
 
-import { Box, IconButton } from '@mui/material'
+import { Box, IconButton, Tooltip } from '@mui/material'
 
 import Icon from '@/components/Icon'
 import { useAppDispatch, useAppSelector } from '@/lib/hooks/useStore'
@@ -34,6 +34,8 @@ const LogoutButton = () => {
   const dispatch = useAppDispatch()
   const authStore = useAppSelector(state => state.auth)
   const [showLogoutButton, setShowLogoutButton] = useState(false)
+  const authEnabled = authStore.anthEnable === true || authStore.anthEnable 
=== 'true'
+  const userName = authStore.authUser?.name
 
   useEffect(() => {
     const checkAuthStatus = async () => {
@@ -68,10 +70,12 @@ const LogoutButton = () => {
 
   return (
     <Box>
-      {showLogoutButton ? (
-        <IconButton onClick={handleLogout}>
-          <Icon icon={'bx:exit'} />
-        </IconButton>
+      {(authEnabled && userName) || showLogoutButton ? (
+        <Tooltip title={userName || ''} disableHoverListener={!userName}>
+          <IconButton onClick={handleLogout}>
+            <Icon icon={'bx:exit'} />
+          </IconButton>
+        </Tooltip>
       ) : null}
     </Box>
   )
diff --git a/web/web/src/lib/store/metalakes/index.js 
b/web/web/src/lib/store/metalakes/index.js
index 1d15d59bf8..263c07a2f0 100644
--- a/web/web/src/lib/store/metalakes/index.js
+++ b/web/web/src/lib/store/metalakes/index.js
@@ -1757,7 +1757,31 @@ export const appMetalakesSlice = createSlice({
     setTableProps(state, action) {
       state.tableProps = action.payload
     },
-    resetMetalakeStore(state, action) {}
+    resetMetalakeStore(state, action) {
+      state.metalakes = []
+      state.filteredMetalakes = []
+      state.tableData = []
+      state.tableProps = []
+      state.catalogs = []
+      state.schemas = []
+      state.tables = []
+      state.columns = []
+      state.filesets = []
+      state.topics = []
+      state.models = []
+      state.versions = []
+      state.metalakeTree = []
+      state.loadedNodes = []
+      state.selectedNodes = []
+      state.expandedNodes = []
+      state.activatedDetails = null
+      state.activatedDetailsLoading = false
+      state.tableLoading = false
+      state.treeLoading = false
+      state.currentMetalakeOwner = null
+      state.currentEntityTags = []
+      state.currentEntityPolicies = []
+    }
   },
   extraReducers: builder => {
     builder.addCase(fetchMetalakes.fulfilled, (state, action) => {
diff --git a/web/web/src/lib/utils/index.js b/web/web/src/lib/utils/index.js
index 933fa6c4cf..374e11bc29 100644
--- a/web/web/src/lib/utils/index.js
+++ b/web/web/src/lib/utils/index.js
@@ -159,8 +159,8 @@ export const genUpdates = (originalData, newData, 
disableUpdate = false) => {
         })
       }
       if (
-        getColumnType(originalColumnsMap[key].type) !== 
getColumnType(newColumnsMap[key].type) ||
-        (ColumnSpesicalType.includes(getColumnType(newColumnsMap[key].type)) 
&& !disableUpdate)
+        getColumnType(originalColumnsMap[key].type) !== 
getColumnType(newColumnsMap[key].type).toLowerCase() ||
+        
(ColumnSpesicalType.includes(getColumnType(newColumnsMap[key].type).toLowerCase())
 && !disableUpdate)
       ) {
         updates.push({
           '@type': 'updateColumnType',

Reply via email to