@datalayer/core
Version:
[](https://datalayer.io)
87 lines (86 loc) • 4.58 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
/*
* Copyright (c) 2023-2025 Datalayer, Inc.
* Distributed under the terms of the Modified BSD License.
*/
import { useState, useEffect } from 'react';
import { useParams } from 'react-router-dom';
import { PageHeader, Heading, Text, Button, TextInput, FormControl, Textarea, Label, } from '@primer/react';
import { Box } from '@datalayer/primer-addons';
import { BoringAvatar } from '../../components/avatars';
import { useCache, useToast } from '../../hooks';
import { useRunStore } from '../../state';
export const IAMTokenEdit = () => {
const { tokenId } = useParams();
const runStore = useRunStore();
const { enqueueToast } = useToast();
const { useUpdateToken, useToken } = useCache();
const getTokenQuery = useToken(tokenId);
const updateTokenMutation = useUpdateToken();
const [token, setToken] = useState();
const [formValues, setFormValues] = useState({
name: token?.name,
description: token?.description,
});
const [validationResult, setValidationResult] = useState({
name: undefined,
description: undefined,
});
useEffect(() => {
if (getTokenQuery.data) {
const token = getTokenQuery.data;
setToken(token);
setFormValues({ ...token });
}
}, [getTokenQuery.data]);
const nameNameChange = (event) => {
setFormValues(prevFormValues => ({
...prevFormValues,
name: event.target.value,
}));
};
const nameDescriptionChange = (event) => {
setFormValues(prevFormValues => ({
...prevFormValues,
description: event.target.value,
}));
};
useEffect(() => {
setValidationResult({
...validationResult,
name: formValues.name === undefined
? undefined
: formValues.name.length > 2
? true
: false,
description: formValues.description === undefined
? undefined
: formValues.description.length > 2
? true
: false,
});
}, [formValues]);
const nameSubmit = async () => {
runStore.layout().showBackdrop();
const updatedToken = {
...token,
name: formValues.name,
description: formValues.description,
};
updateTokenMutation.mutate(updatedToken, {
onSuccess: (resp) => {
if (resp.success) {
enqueueToast('The token is successfully updated.', {
variant: 'success',
});
setToken(updatedToken);
}
},
onSettled: () => {
runStore.layout().hideBackdrop();
},
});
};
return (_jsxs(_Fragment, { children: [_jsx(PageHeader, { children: _jsx(Heading, { sx: { fontSize: 3 }, children: "IAM Token" }) }), _jsxs(Box, { display: "flex", children: [_jsxs(Box, { children: [_jsx(BoringAvatar, { displayName: token?.name, size: 100, style: { paddingRight: 10 } }), _jsx(Text, { as: "h2", sx: { paddingTop: 3 }, children: token?.name }), _jsx(Box, { mt: 3, children: _jsx(Label, { size: "large", children: token?.variant }) })] }), _jsx(Box, { ml: 10, children: _jsxs(Box, { sx: { label: { marginTop: 2 } }, children: [_jsxs(FormControl, { children: [_jsx(FormControl.Label, { children: "Name" }), _jsx(TextInput, { block: true, value: formValues.name, onChange: nameNameChange }), validationResult.name === false && (_jsx(FormControl.Validation, { variant: "error", children: "Name must have more than 2 characters." }))] }), _jsxs(FormControl, { children: [_jsx(FormControl.Label, { children: "Description" }), _jsx(Textarea, { block: true, value: formValues.description, onChange: nameDescriptionChange, rows: 5 }), validationResult.description === false && (_jsx(FormControl.Validation, { variant: "error", children: "Description must have more than 2 characters." }))] }), _jsxs(FormControl, { children: [_jsx(FormControl.Label, { children: "Expiration date" }), _jsx(TextInput, { block: true, value: token?.expirationDate.toLocaleDateString(), onChange: nameNameChange, disabled: true })] }), _jsx(Button, { variant: "primary", disabled: !validationResult.name || !validationResult.description, sx: { marginTop: 3 }, onClick: nameSubmit, children: "Update token" })] }) })] })] }));
};
export default IAMTokenEdit;