UNPKG

carbon-custom-elements

Version:

A Carbon Design System variant that's as easy to use as native HTML elements, with no framework tax, no framework silo.

1 lines 4.4 kB
{"version":3,"sources":["components/date-picker/fix-events-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAEtD,OAAO,MAAM,MAAM,+BAA+B,CAAC;AACnD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,SAAS,EAAE,iBAAiB,CAAC;IAE7B;;OAEG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,wCAAyC,SAAQ,iBAAiB;IACjF;;OAEG;IACH,0CAA0C,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3D;;OAEG;IACH,wCAAwC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1D;;AAED;;;GAGG;AACH,wBAiEE","file":"fix-events-plugin.d.ts","sourcesContent":["/**\n * @license\n *\n * Copyright IBM Corp. 2019\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Instance as FlatpickrInstance } from 'flatpickr/dist/types/instance';\nimport { Plugin } from 'flatpickr/dist/types/options';\nimport on from 'carbon-components/es/globals/js/misc/on';\nimport Handle from '../../globals/internal/handle';\nimport BXDatePickerInput from './date-picker-input';\n\n/**\n * The configuration for the Flatpickr plugin to fix Flatpickr's behavior of certain events.\n */\nexport interface DatePickerFixEventsPluginConfig {\n /**\n * The input box to enter starting date.\n */\n inputFrom: BXDatePickerInput;\n\n /**\n * The input box to enter end date.\n */\n inputTo?: BXDatePickerInput;\n}\n\n/**\n * `FlatpickrInstance` with additional properties used for `carbonFlatpickrFixEventsPlugin`.\n */\nexport interface ExtendedFlatpickrInstanceFixEventsPlugin extends FlatpickrInstance {\n /**\n * The handle for `keydown` event handler in the `<input>` for the starting date.\n */\n _hBXCEDatePickerFixEventsPluginKeydownFrom?: Handle | null;\n\n /**\n * The handle for `keydown` event handler in the `<input>` for the end date.\n */\n _hBXCEDatePickerFixEventsPluginKeydownTo?: Handle | null;\n}\n\n/**\n * @param config Plugin configuration.\n * @returns A Flatpickr plugin to fix Flatpickr's behavior of certain events.\n */\nexport default (config: DatePickerFixEventsPluginConfig): Plugin => (fp: ExtendedFlatpickrInstanceFixEventsPlugin) => {\n /**\n * Handles `keydown` event.\n */\n const handleKeydown = (event: KeyboardEvent) => {\n const { inputFrom, inputTo } = config;\n const { key, target } = event;\n if (inputFrom === target || inputTo === target) {\n switch (key) {\n case 'Enter':\n // Makes sure the hitting enter key picks up pending values of both `<input>`\n // Workaround for: https://github.com/flatpickr/flatpickr/issues/1942\n fp.setDate([inputFrom.value!, (inputTo && inputTo.value)!], true, fp.config.dateFormat);\n event.stopPropagation();\n break;\n case 'ArrowLeft':\n case 'Left':\n case 'ArrowRight':\n case 'Right':\n // Prevents Flatpickr code from canceling the event if left/right arrow keys are hit on `<input>`,\n // so user can move the keyboard cursor for editing dates\n // Workaround for: https://github.com/flatpickr/flatpickr/issues/1943\n event.stopPropagation();\n break;\n default:\n break;\n }\n }\n };\n\n /**\n * Releases event listeners used in this Flatpickr plugin.\n */\n const release = () => {\n if (fp._hBXCEDatePickerFixEventsPluginKeydownTo) {\n fp._hBXCEDatePickerFixEventsPluginKeydownTo = fp._hBXCEDatePickerFixEventsPluginKeydownTo.release();\n }\n if (fp._hBXCEDatePickerFixEventsPluginKeydownFrom) {\n fp._hBXCEDatePickerFixEventsPluginKeydownFrom = fp._hBXCEDatePickerFixEventsPluginKeydownFrom.release();\n }\n };\n\n /**\n * Sets up event listeners used for this Flatpickr plugin.\n */\n const init = () => {\n release();\n const { inputFrom, inputTo } = config;\n fp._hBXCEDatePickerFixEventsPluginKeydownFrom = on(inputFrom, 'keydown', handleKeydown, true);\n if (inputTo) {\n fp._hBXCEDatePickerFixEventsPluginKeydownTo = on(inputTo, 'keydown', handleKeydown, true);\n }\n };\n\n /**\n * Registers this Flatpickr plugin.\n */\n const register = () => {\n fp.loadedPlugins.push('carbonFlatpickrFixEventsPlugin');\n };\n\n return {\n onReady: [register, init],\n onDestroy: [release],\n };\n};\n"]}