Skip to content

Commit

Permalink
migrated logic into index
Browse files Browse the repository at this point in the history
  • Loading branch information
jonbnewman committed Jan 4, 2022
1 parent 1d854a8 commit f8fc826
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 65 deletions.
4 changes: 4 additions & 0 deletions dts.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ module.exports = {
extract: !!options.writeMeta,
})
);

console.info('options.format', options.format);
// options.format = '';

return config;
},
};
65 changes: 63 additions & 2 deletions src/index.tsx
Original file line number Diff line number Diff line change
@@ -1,2 +1,63 @@
export { usePrompt as default } from './usePrompt';
export * from './usePrompt';
import { ReactNode, useEffect, useState } from 'react';

export type PromptResponse = any;
export type RendererCallback = (prompt: {
visible: boolean;
resolve: (value: PromptResponse) => void;
reject: (value?: PromptResponse) => void;
}) => ReactNode;

interface Prompt {
state: 'pending' | 'hidden';
renderer: RendererCallback;
resolve: (value: PromptResponse) => void;
reject: (value?: PromptResponse) => void;
}

/**
* Use prompt hook
* @returns [prompt, showPrompt, visible]
*/
export default function usePrompt(): [
ReactNode,
(renderer: RendererCallback) => Promise<PromptResponse>,
boolean
] {
const [visible, setVisible] = useState(false);
const [prompt, setPrompt] = useState<Prompt>({
state: 'hidden',
renderer: () => null,
resolve: () => {},
reject: () => {},
});

function resolve(value?: PromptResponse) {
prompt.resolve(value);
setPrompt({ ...prompt, state: 'hidden' });
}
function reject(value?: PromptResponse) {
prompt.reject(value);
setPrompt({ ...prompt, state: 'hidden' });
}

useEffect(() => {
const setVisibleTimeout = setTimeout(() => {
setVisible(prompt.state === 'pending');
});
return () => clearTimeout(setVisibleTimeout);
}, [prompt]);

return [
prompt.renderer({ visible, resolve, reject }),
(renderer) =>
new Promise<PromptResponse>((resolve, reject) =>
setPrompt({
state: 'pending',
renderer,
resolve,
reject,
})
),
visible,
];
}
63 changes: 0 additions & 63 deletions src/usePrompt.tsx

This file was deleted.

0 comments on commit f8fc826

Please sign in to comment.