2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-17 20:45:44 +00:00
This commit is contained in:
Matthias Mair
2025-01-12 15:05:18 +01:00
parent d6ef1d9c04
commit 95d3a954c2

View File

@ -6,7 +6,7 @@ import { useState } from 'react';
const createPromise = () => { const createPromise = () => {
let resolver: any; let resolver: any;
return [ return [
new Promise((resolve, reject) => { new Promise((resolve) => {
resolver = resolve; resolver = resolve;
}), }),
resolver resolver
@ -16,7 +16,9 @@ const createPromise = () => {
/* Adapted from https://daveteu.medium.com/react-custom-confirmation-box-458cceba3f7b */ /* Adapted from https://daveteu.medium.com/react-custom-confirmation-box-458cceba3f7b */
export const useConfirm = () => { export const useConfirm = () => {
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const [resolver, setResolver] = useState({ resolver: null }); const [resolver, setResolver] = useState<((status: boolean) => void) | null>(
null
);
const [label, setLabel] = useState(''); const [label, setLabel] = useState('');
const getConfirmation = async (text: string) => { const getConfirmation = async (text: string) => {
@ -24,13 +26,15 @@ export const useConfirm = () => {
setOpen(true); setOpen(true);
const [promise, resolve] = await createPromise(); const [promise, resolve] = await createPromise();
setResolver({ resolve }); setResolver(resolve);
return promise; return promise;
}; };
const onClick = async (status: boolean) => { const onClick = async (status: boolean) => {
setOpen(false); setOpen(false);
resolver.resolve(status); if (resolver) {
resolver(status);
}
}; };
const Confirmation = () => ( const Confirmation = () => (
@ -49,7 +53,10 @@ type InputProps = {
name: string; name: string;
description: string; description: string;
}; };
export const useReauth = () => { export const useReauth = (): [
(props: InputProps) => Promise<[string, boolean]>,
() => JSX.Element
] => {
const [inputProps, setInputProps] = useState<InputProps>({ const [inputProps, setInputProps] = useState<InputProps>({
label: '', label: '',
name: '', name: '',
@ -58,7 +65,9 @@ export const useReauth = () => {
const [value, setValue] = useState(''); const [value, setValue] = useState('');
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const [resolver, setResolver] = useState({ resolver: null }); const [resolver, setResolver] = useState<{
resolve: (result: string, positive: boolean) => void;
} | null>(null);
const getReauthText = async (props: InputProps) => { const getReauthText = async (props: InputProps) => {
setInputProps(props); setInputProps(props);
@ -71,7 +80,9 @@ export const useReauth = () => {
const onClick = async (result: string, positive: boolean) => { const onClick = async (result: string, positive: boolean) => {
setOpen(false); setOpen(false);
if (resolver) {
resolver.resolve(result, positive); resolver.resolve(result, positive);
}
}; };
const ReauthModal = () => ( const ReauthModal = () => (