forked from FINAKON/HelpProject
1. Initial Commit - a boiler plate code and POC to realize the concept of context sensitive help 2. Frontend code written in ReactJS 3. Backend code written in Java, Spring Boot Framework 4. Frontend Start: pre-requisites : node, npm npm run dev ==> to start the frontend vite server 5. Backend Start: pre-requisites : java, mvn mvn spring-boot:run ==> to start the backend server 6. Visit http://localhost:5173/ for basic demo of help, press F1 in textboxes 7. Visit http://localhost:5173/editor and enter "admin123" to add/modify texts. Happy Coding !!! Thank you, Bhargava.
68 lines
2.1 KiB
TypeScript
68 lines
2.1 KiB
TypeScript
/**
|
||
* Handle values based on a field.
|
||
*
|
||
* @template {InvalidHandler} [Invalid=InvalidHandler]
|
||
* @template {UnknownHandler} [Unknown=UnknownHandler]
|
||
* @template {Record<string, Handler>} [Handlers=Record<string, Handler>]
|
||
* @param {string} key
|
||
* Field to switch on.
|
||
* @param {Options<Invalid, Unknown, Handlers>} [options]
|
||
* Configuration (required).
|
||
* @returns {{unknown: Unknown, invalid: Invalid, handlers: Handlers, (...parameters: Parameters<Handlers[keyof Handlers]>): ReturnType<Handlers[keyof Handlers]>, (...parameters: Parameters<Unknown>): ReturnType<Unknown>}}
|
||
*/
|
||
export function zwitch<
|
||
Invalid extends InvalidHandler = InvalidHandler,
|
||
Unknown extends UnknownHandler = UnknownHandler,
|
||
Handlers extends Record<string, Handler> = Record<string, Handler>
|
||
>(
|
||
key: string,
|
||
options?: Options<Invalid, Unknown, Handlers> | undefined
|
||
): {
|
||
(...parameters: Parameters<Handlers[keyof Handlers]>): ReturnType<
|
||
Handlers[keyof Handlers]
|
||
>
|
||
(...parameters: Parameters<Unknown>): ReturnType<Unknown>
|
||
unknown: Unknown
|
||
invalid: Invalid
|
||
handlers: Handlers
|
||
}
|
||
/**
|
||
* Handle a value, with a certain ID field set to a certain value.
|
||
* The ID field is passed to `zwitch`, and it’s value is this function’s
|
||
* place on the `handlers` record.
|
||
*/
|
||
export type Handler = (...parameters: any[]) => any
|
||
/**
|
||
* Handle values that do have a certain ID field, but it’s set to a value
|
||
* that is not listed in the `handlers` record.
|
||
*/
|
||
export type UnknownHandler = (value: unknown, ...rest: any[]) => any
|
||
/**
|
||
* Handle values that do not have a certain ID field.
|
||
*/
|
||
export type InvalidHandler = (
|
||
value: unknown,
|
||
...rest: any[]
|
||
) => void | null | undefined | never
|
||
/**
|
||
* Configuration (required).
|
||
*/
|
||
export type Options<
|
||
Invalid extends InvalidHandler = InvalidHandler,
|
||
Unknown extends UnknownHandler = UnknownHandler,
|
||
Handlers extends Record<string, Handler> = Record<string, Handler>
|
||
> = {
|
||
/**
|
||
* Handler to use for invalid values.
|
||
*/
|
||
invalid?: Invalid | undefined
|
||
/**
|
||
* Handler to use for unknown values.
|
||
*/
|
||
unknown?: Unknown | undefined
|
||
/**
|
||
* Handlers to use.
|
||
*/
|
||
handlers?: Handlers | undefined
|
||
}
|