mirror of
https://github.com/apache/superset.git
synced 2026-05-08 01:15:46 +00:00
149 lines
4.4 KiB
TypeScript
149 lines
4.4 KiB
TypeScript
/**
|
|
* 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 { SupersetClient, t } from '@superset-ui/core';
|
|
import { FormModal, FormItem, Input } from '@superset-ui/core/components';
|
|
import { useToasts } from 'src/components/MessageToasts/withToasts';
|
|
import { User } from 'src/types/bootstrapTypes';
|
|
import { BaseUserListModalProps, FormValues } from '../users/types';
|
|
|
|
export interface UserInfoModalProps extends BaseUserListModalProps {
|
|
isEditMode?: boolean;
|
|
user?: User;
|
|
}
|
|
|
|
function UserInfoModal({
|
|
show,
|
|
onHide,
|
|
onSave,
|
|
isEditMode,
|
|
user,
|
|
}: UserInfoModalProps) {
|
|
const { addDangerToast, addSuccessToast } = useToasts();
|
|
|
|
const requiredFields = isEditMode
|
|
? ['first_name', 'last_name']
|
|
: ['password', 'confirm_password'];
|
|
const initialValues = isEditMode
|
|
? {
|
|
first_name: user?.firstName,
|
|
last_name: user?.lastName,
|
|
}
|
|
: {};
|
|
const handleFormSubmit = async (values: FormValues) => {
|
|
try {
|
|
const { confirm_password, ...payload } = values;
|
|
await SupersetClient.put({
|
|
endpoint: `/api/v1/me/`,
|
|
jsonPayload: { ...payload },
|
|
});
|
|
addSuccessToast(
|
|
isEditMode
|
|
? t('The user was updated successfully')
|
|
: t('The password reset was successful'),
|
|
);
|
|
onSave();
|
|
} catch (error) {
|
|
addDangerToast(t('Something went wrong while saving the user info'));
|
|
}
|
|
};
|
|
|
|
const EditModeFields = () => (
|
|
<>
|
|
<FormItem
|
|
name="first_name"
|
|
label={t('First name')}
|
|
rules={[{ required: true, message: t('First name is required') }]}
|
|
>
|
|
<Input
|
|
name="first_name"
|
|
placeholder={t("Enter the user's first name")}
|
|
/>
|
|
</FormItem>
|
|
<FormItem
|
|
name="last_name"
|
|
label={t('Last name')}
|
|
rules={[{ required: true, message: t('Last name is required') }]}
|
|
>
|
|
<Input name="last_name" placeholder={t("Enter the user's last name")} />
|
|
</FormItem>
|
|
</>
|
|
);
|
|
|
|
const ResetPasswordFields = () => (
|
|
<>
|
|
<FormItem
|
|
name="password"
|
|
label={t('Password')}
|
|
rules={[{ required: true, message: t('Password is required') }]}
|
|
>
|
|
<Input.Password
|
|
name="password"
|
|
placeholder="Enter the user's password"
|
|
/>
|
|
</FormItem>
|
|
<FormItem
|
|
name="confirm_password"
|
|
label={t('Confirm Password')}
|
|
dependencies={['password']}
|
|
rules={[
|
|
{
|
|
required: true,
|
|
message: t('Please confirm your password'),
|
|
},
|
|
({ getFieldValue }) => ({
|
|
validator(_, value) {
|
|
if (!value || getFieldValue('password') === value) {
|
|
return Promise.resolve();
|
|
}
|
|
return Promise.reject(new Error(t('Passwords do not match!')));
|
|
},
|
|
}),
|
|
]}
|
|
>
|
|
<Input.Password
|
|
name="confirm_password"
|
|
placeholder={t("Confirm the user's password")}
|
|
/>
|
|
</FormItem>
|
|
</>
|
|
);
|
|
|
|
return (
|
|
<FormModal
|
|
show={show}
|
|
onHide={onHide}
|
|
title={isEditMode ? t('Edit user') : t('Reset password')}
|
|
onSave={onSave}
|
|
formSubmitHandler={handleFormSubmit}
|
|
requiredFields={requiredFields}
|
|
initialValues={initialValues}
|
|
>
|
|
{isEditMode ? <EditModeFields /> : <ResetPasswordFields />}
|
|
</FormModal>
|
|
);
|
|
}
|
|
|
|
export const UserInfoResetPasswordModal = (
|
|
props: Omit<UserInfoModalProps, 'isEditMode' | 'user'>,
|
|
) => <UserInfoModal {...props} isEditMode={false} />;
|
|
|
|
export const UserInfoEditModal = (
|
|
props: Omit<UserInfoModalProps, 'isEditMode'> & { user: User },
|
|
) => <UserInfoModal {...props} isEditMode />;
|