@startlibs/form 1.1.2 → 1.2.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/AutoComplete.mjs +19 -10
- package/lib/AutoComplete.mjs.map +1 -1
- package/lib/Checkbox.mjs +4 -2
- package/lib/Checkbox.mjs.map +1 -1
- package/lib/Combobox.mjs +1 -1
- package/lib/Combobox.mjs.map +1 -1
- package/lib/DatePicker.mjs +25 -9
- package/lib/DatePicker.mjs.map +1 -1
- package/lib/Errors.mjs +20 -10
- package/lib/Errors.mjs.map +1 -1
- package/lib/ExpandableBox.mjs +1 -1
- package/lib/ExpandableBox.mjs.map +1 -1
- package/lib/Field.mjs +10 -5
- package/lib/Field.mjs.map +1 -1
- package/lib/FieldBox.mjs +3 -3
- package/lib/FieldBox.mjs.map +1 -1
- package/lib/InputboxGroup.mjs +1 -1
- package/lib/InputboxGroup.mjs.map +1 -1
- package/lib/RichText.mjs +11 -6
- package/lib/RichText.mjs.map +1 -1
- package/lib/TextInput.mjs +4 -4
- package/lib/TextInput.mjs.map +1 -1
- package/lib/alt/checkbox/SimpleCheckbox.mjs +1 -1
- package/lib/alt/checkbox/SimpleCheckbox.mjs.map +1 -1
- package/lib/alt/checkbox/ToggleCheckbox.mjs +4 -3
- package/lib/alt/checkbox/ToggleCheckbox.mjs.map +1 -1
- package/lib/alt/radiobox/CleanTabRadiobox.mjs +1 -1
- package/lib/alt/radiobox/CleanTabRadiobox.mjs.map +1 -1
- package/lib/alt/radiobox/SimpleRadiobox.mjs +2 -2
- package/lib/alt/radiobox/SimpleRadiobox.mjs.map +1 -1
- package/lib/alt/radiobox/TabRadiobox.mjs +1 -1
- package/lib/alt/radiobox/TabRadiobox.mjs.map +1 -1
- package/lib/index.cjs +106 -54
- package/lib/index.cjs.map +1 -1
- package/lib/index.mjs +2 -2
- package/lib/withFormImageInput.mjs +1 -1
- package/lib/withFormImageInput.mjs.map +1 -1
- package/lib-yak/AutoComplete.mjs +705 -0
- package/lib-yak/AutoComplete.mjs.map +1 -0
- package/lib-yak/Checkbox.mjs +80 -0
- package/lib-yak/Checkbox.mjs.map +1 -0
- package/lib-yak/Combobox.mjs +652 -0
- package/lib-yak/Combobox.mjs.map +1 -0
- package/lib-yak/ComboboxWithCustom.mjs +77 -0
- package/lib-yak/ComboboxWithCustom.mjs.map +1 -0
- package/lib-yak/DatePicker.mjs +774 -0
- package/lib-yak/DatePicker.mjs.map +1 -0
- package/lib-yak/EditableBox.mjs +495 -0
- package/lib-yak/EditableBox.mjs.map +1 -0
- package/lib-yak/Errors.mjs +226 -0
- package/lib-yak/Errors.mjs.map +1 -0
- package/lib-yak/ExpandableBox.mjs +247 -0
- package/lib-yak/ExpandableBox.mjs.map +1 -0
- package/lib-yak/Field.mjs +93 -0
- package/lib-yak/Field.mjs.map +1 -0
- package/lib-yak/FieldBox.mjs +173 -0
- package/lib-yak/FieldBox.mjs.map +1 -0
- package/lib-yak/Form.mjs +322 -0
- package/lib-yak/Form.mjs.map +1 -0
- package/lib-yak/FormValue.mjs +111 -0
- package/lib-yak/FormValue.mjs.map +1 -0
- package/lib-yak/InputboxGroup.mjs +146 -0
- package/lib-yak/InputboxGroup.mjs.map +1 -0
- package/lib-yak/Radiobox.mjs +69 -0
- package/lib-yak/Radiobox.mjs.map +1 -0
- package/lib-yak/RichText.mjs +776 -0
- package/lib-yak/RichText.mjs.map +1 -0
- package/lib-yak/TextInput.mjs +589 -0
- package/lib-yak/TextInput.mjs.map +1 -0
- package/lib-yak/alt/checkbox/SimpleCheckbox.mjs +225 -0
- package/lib-yak/alt/checkbox/SimpleCheckbox.mjs.map +1 -0
- package/lib-yak/alt/checkbox/ToggleCheckbox.mjs +173 -0
- package/lib-yak/alt/checkbox/ToggleCheckbox.mjs.map +1 -0
- package/lib-yak/alt/radiobox/CleanTabRadiobox.mjs +87 -0
- package/lib-yak/alt/radiobox/CleanTabRadiobox.mjs.map +1 -0
- package/lib-yak/alt/radiobox/IconRadioBox.mjs +138 -0
- package/lib-yak/alt/radiobox/IconRadioBox.mjs.map +1 -0
- package/lib-yak/alt/radiobox/SimpleRadiobox.mjs +203 -0
- package/lib-yak/alt/radiobox/SimpleRadiobox.mjs.map +1 -0
- package/lib-yak/alt/radiobox/TabRadiobox.mjs +117 -0
- package/lib-yak/alt/radiobox/TabRadiobox.mjs.map +1 -0
- package/lib-yak/enhanceInput.mjs +131 -0
- package/lib-yak/enhanceInput.mjs.map +1 -0
- package/lib-yak/index.mjs +28 -0
- package/lib-yak/index.mjs.map +1 -0
- package/lib-yak/useConfirmDialog.mjs +117 -0
- package/lib-yak/useConfirmDialog.mjs.map +1 -0
- package/lib-yak/useDraftConfirmation.mjs +56 -0
- package/lib-yak/useDraftConfirmation.mjs.map +1 -0
- package/lib-yak/validation.mjs +91 -0
- package/lib-yak/validation.mjs.map +1 -0
- package/lib-yak/withFormImageInput.mjs +298 -0
- package/lib-yak/withFormImageInput.mjs.map +1 -0
- package/package.json +13 -3
- package/src/AutoComplete.jsx +25 -15
- package/src/Checkbox.jsx +2 -2
- package/src/Combobox.jsx +1 -1
- package/src/DatePicker.jsx +25 -22
- package/src/Errors.jsx +18 -8
- package/src/ExpandableBox.jsx +3 -3
- package/src/Field.jsx +9 -4
- package/src/FieldBox.jsx +6 -6
- package/src/IconRadioBoxOldHubt.jsx +1 -1
- package/src/InputboxGroup.jsx +1 -1
- package/src/RichText.jsx +17 -13
- package/src/TextInput.jsx +37 -26
- package/src/alt/checkbox/SimpleCheckbox.jsx +5 -5
- package/src/alt/checkbox/ToggleCheckbox.jsx +9 -8
- package/src/alt/radiobox/CleanTabRadiobox.jsx +2 -2
- package/src/alt/radiobox/SimpleRadiobox.jsx +7 -7
- package/src/alt/radiobox/TabRadiobox.jsx +4 -4
- package/src/withFormImageInput.jsx +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker.mjs","sources":["../src/DatePicker.jsx"],"sourcesContent":["import React, {forwardRef, useContext, useEffect, useRef, useState} from 'react'\nimport styled, {css} from 'styled-components'\nimport _ from 'lodash/fp'\nimport {StartlibsContext, useEnsureRef, usePopupToggle, usePrevious} from '@startlibs/core'\nimport {formatDate, formatDateToPattern, getColor, getNumberInputType, ifProp, insertKeyframes, media, parseDate} from '@startlibs/utils'\nimport {Icon} from '@startlibs/components'\nimport {Field} from './Field'\nimport {TextInput} from './TextInput'\nimport {enhanceInput, useInput} from './enhanceInput'\nimport {darken} from 'polished'\nimport {callIfFunction} from '@startlibs/utils'\n\nexport const CALENDAR_LEVEL_DAY = 'day'\nexport const CALENDAR_LEVEL_MONTH = 'month'\nexport const CALENDAR_LEVEL_YEAR = 'year'\n\nconst LEVELS = [CALENDAR_LEVEL_DAY, CALENDAR_LEVEL_MONTH, CALENDAR_LEVEL_YEAR]\n\n// Nome fixo do @keyframes preservado: um `keyframes` do styled-components geraria um nome\n// com hash, diferente do atual \"datePickerFadeInDown\" (quebraria quem lê animationName). Por\n// isso o bloco fica fora de um template styled/css/keyframes, registrado pelo CSSOM (sem\n// nonce) no primeiro render do DatePickerContainer (mesmo padrão de components/src/Loading.jsx).\nconst injectDatePickerFadeInDownKeyframes = () => insertKeyframes('datePickerFadeInDown',\n 'from { opacity: 0; transform: translateY(-10px); pointer-events: none; } to { opacity: 1; transform: none; pointer-events: none; }')\n\n// styled(DatePickerContainerBase) mira num componente, não numa tag: ao contrário do antigo\n// styled.div, o styled-components não filtra prop inválida pra <div> nesse caso. O template\n// abaixo não lê nenhuma prop custom, então repassar tudo com {...props} é seguro.\nconst DatePickerContainerBase = React.forwardRef((props, ref) => {\n injectDatePickerFadeInDownKeyframes()\n return <div ref={ref} {...props}/>\n})\n\nconst DatePickerContainer = styled(DatePickerContainerBase)`\n width: 20rem;\n position: absolute;\n z-index: 100;\n background-color: white;\n border-radius: 5px;\n border: 1px solid ${getColor('gray210')};\n user-select: none;\n box-shadow: 0 0 4px 0 rgba(0,0,0,0.2);\n font-size: 13px;\n text-align: center;\n animation: 0.2s datePickerFadeInDown ease-out;\n display: none;\n @supports (flex-wrap: wrap) {\n display: block;\n }\n input {\n padding-right: 2.25rem;\n ${media.mobile`\n width: 2.5rem;\n `}\n }\n`\n\nconst CalendarHeader = styled.div`\n display: flex;\n padding: 0.5rem;\n align-items: center;\n`\n\nconst CalendarContentContainer = styled.div`\n padding: 0 0.5rem 0.5rem 0.5rem;\n display: flex; \n flex-wrap: wrap;\n justify-content: space-around;\n`\n\nconst WeekHeader = styled(CalendarContentContainer)`\n font-size: 12px;\n font-weight: 600;\n cursor: default;\n span {\n width: 2.5rem;\n }\n`\n\nconst CalendarClickable = styled.a`\n &:hover, &:focus {\n background-color: rgba(0,0,0,0.1);\n cursor: pointer;\n }\n`\n\nconst TitleButton = styled(CalendarClickable)`\n font-size: 16px;\n font-weight: 600;\n flex-grow: 1;\n border-radius: 4px;\n line-height: 3rem;\n`\n\nconst NavigationButton = styled(CalendarClickable)`\n font-size: 21px;\n width: 3rem;\n text-align: center;\n border-radius: 4px;\n height: 3rem;\n ${Icon} {\n line-height: 3rem;\n }\n`\n\nconst CalendarContent = styled(CalendarClickable)`\n line-height: 2.25rem;\n flex-grow: 1;\n display: inline-block;\n border-radius: 5px;\n margin-top: 0.25rem;\n margin-left: 0.25rem;\n ${ifProp('isEdge', css`color: rgba(0,0,0,0.4);`)}\n ${ifProp('isSelected', css`box-shadow: inset 0 0 0 1px ${getColor('gray210')};`)}\n ${ifProp('isDisabled', \n `pointer-events: none;\n opacity: 0.5;`\n )} \n ${ifProp('isCurrent', css`\n background: ${getColor('main')};\n color: #FFF;\n &:hover {\n background-color: ${props => darken(0.075, getColor('main')(props))};\n }\n ${ifProp('isSelected', 'box-shadow: none;')}\n `)}\n`\n\nconst DayItem = styled(CalendarContent)`\n ${props => props.index % 7 === 0 && 'margin-left:0;'}\n flex-basis: 12%;\n`\nconst MonthItem = styled(CalendarContent)`\n ${props => props.index % 3 === 0 && 'margin-left:0;'}\n flex-basis: 30%;\n`\nconst YearItem = styled(CalendarContent)`\n ${props => props.index % 3 === 0 && 'margin-left:0;'}\n flex-basis: 30%;\n`\n\nconst DatePickerInputIcon = styled(Icon)`\n position: absolute;\n outline: none;\n bottom: 0;\n font-size: 21px;\n line-height: 3rem;\n right: 0;\n width: 2rem;\n cursor: pointer;\n color: ${getColor('gray150')};\n &:hover {\n color: ${getColor('main')};\n }\n display: none;\n @supports (flex-wrap: wrap) {\n display: block;\n }\n ${props => props.disabled && 'pointer-events: none;'}\n ${media.mobile`\n line-height: 42px;\n width: 2.25rem;\n `}\n`\n\nconst ClearButton = styled(Icon)`\n color: ${getColor('gray90')};\n font-size: 12px;\n position: absolute;\n right: 40px;\n bottom: 0;\n transform: translateY(-50%);\n cursor: pointer;\n width: 1.5rem;\n line-height: 1.5rem;\n text-align: center;\n border-radius: 50%;\n background: rgba(0,0,0,0.1);\n &:hover {\n background: #f7d3d4;\n color: ${getColor('alert')};\n }\n`\n\nconst InputAndIconWrapper = styled.div`\n position: relative;\n`\n\nconst ShortcutsWrapper = styled.div`\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n padding: 0.5rem 0.25rem 0;\n color: ${getColor('gray150')};\n \n .link {\n cursor: pointer;\n font-weight: 600;\n text-decoration: underline;\n\n ${media.mobile`\n font-size: 13px; \n `}\n\n &:hover {\n color: ${getColor('main')};\n }\n\n ${ifProp('disabled', css`\n pointer-events: none;\n opacity: 0.5;\n `)}\n }\n`\n\n\nconst KeyMapper = (level) => {\n const upDownSpacing = level === CALENDAR_LEVEL_DAY ? 7 : 3\n return {\n 'ArrowLeft': -1,\n 'ArrowRight': 1,\n 'ArrowUp': -upDownSpacing,\n 'ArrowDown': upDownSpacing\n }\n}\n\nconst getUTCDate = (year,month = 0,date = 1,hour = 0,min =0 ,sec =0 ,ms = 0) => new Date(Date.UTC(year,month,date,hour,min,sec,ms))\nconst getUTCDateBefore = (year,month = 0,date = 1,hour = 0,min =0 ,sec =0 ,ms = -1) => new Date(Date.UTC(year,month,date,hour,min,sec,ms))\n\nexport const DatePicker = forwardRef((\n {\n format = 'dd/MM/yyyy',\n min = new Date(now().setUTCFullYear(now().getUTCFullYear() - 100)),\n max = new Date(now().setUTCFullYear(now().getUTCFullYear() + 100)),\n weekStartsMonday = false,\n label, mandatory, tabIndex, helpText,\n path,\n timezoneOffset = 0,\n placeholder,\n onBlur,\n raw,\n disabled,\n level,\n daysFromNowShortcuts, // Uma array de números representando atalhos de dias a partir de agora, e.g. [0, 1, 3]\n monthsFromNowShortcuts, // Uma array de números representando atalhos de meses a partir de agora, e.g. [0, 1, 3]\n ...rest\n },\n maybeInputRef\n) => {\n\n const inputRef = useEnsureRef(maybeInputRef)\n\n const [formValue, setUnoffsetedFormValue, {hasErrors}] = useInput({path,...rest},raw)\n const setFormValue = (newV) => setUnoffsetedFormValue(_.isFinite(newV) && newV !== -1 ? newV - (timezoneOffset * 36e5) : newV)\n\n const popup = usePopupToggle()\n const calendarElement = useRef()\n\n const messages = useContext(StartlibsContext).dateMessages\n\n const time = Number(formValue)\n const offsetedTime = time + (timezoneOffset * 36e5)\n const [textValue, setRawTextValue] = useState(!isNaN(time) ? formatDate(new Date(offsetedTime), format, messages) : '')\n const prevValue = usePrevious(textValue)\n const [hasFormatErrors, setHasFormatErrors] = useState(false)\n\n useEffect(() => {\n if (textValue && prevValue && textValue.length > prevValue.length+1) {\n setTimeout(()=>inputRef.current.setSelectionRange(inputRef.current.value.length+1,inputRef.current.value.length+1),1);\n }\n },[textValue])\n\n const isShortcutsEnabled = !!daysFromNowShortcuts && daysFromNowShortcuts.length > 0 || !!monthsFromNowShortcuts && monthsFromNowShortcuts.length > 0;\n \n const setDateToNDaysFromNow = (daysFromNow) => {\n const date = new Date(now())\n date.setUTCDate(date.getUTCDate() + daysFromNow)\n setFormValue(date.getTime())\n updateText(date)\n }\n\n const setDateToNMonthsFromNow = (monthsFromNow) => {\n const date = new Date(now())\n date.setUTCMonth(date.getUTCMonth() + monthsFromNow)\n setFormValue(date.getTime())\n updateText(date)\n }\n\n const setTextValue = (textValue) => {\n const value = formValue === -1 || isNaN(formValue) ? now() : new Date(Number(formValue))\n const date = parseDate(textValue, value, format, messages)\n if (isNaN(date.getTime())) {\n const nextMonth = new Date(value)\n const closestLeapYear = new Date(value)\n nextMonth.setUTCMonth(value.getUTCMonth() + 1)\n closestLeapYear.setUTCFullYear(getClosestNextLeapYear(value.getUTCFullYear()))\n const nextMonthDate = parseDate(textValue, nextMonth, format, messages)\n const closestLeapYearDate = parseDate(textValue, closestLeapYear, format, messages)\n setRawTextValue(textValue)\n setHasFormatErrors(isNaN(nextMonthDate.getTime()) && isNaN(closestLeapYearDate))\n } else if (!inRange({min,max},date)) {\n setRawTextValue(textValue)\n setHasFormatErrors(true)\n setFormValue(-1)\n } else {\n setRawTextValue(textValue)\n setHasFormatErrors(false)\n setFormValue(date.getTime())\n }\n }\n\n const updateText = (date) => {\n setTextValue(formatDate(date, format, messages))\n setHasFormatErrors(false)\n }\n\n const setValue = (value) => {\n setFormValue(value)\n updateText(new Date(value))\n }\n\n const confirmValue = () => {\n popup.close()\n if (!textValue) {\n setFormValue(undefined)\n setHasFormatErrors(false)\n } else {\n const date = parseDate(textValue, new Date(formValue), format, messages, true)\n if (isNaN(date.getTime())) {\n setHasFormatErrors(true)\n setFormValue(-1)\n } else {\n updateText(date)\n }\n }\n }\n\n const _onBlur = (e) => {\n const currentTarget = e.currentTarget\n setTimeout(() => {\n if (!currentTarget.contains(document.activeElement)) {\n confirmValue()\n }\n callIfFunction(onBlur)\n }, 1)\n }\n\n const onKeyDown = (e) => {\n const isConfirm = e.key === 'Enter'\n if (Object.keys(KeyMapper()).indexOf(e.key) >= 0 || isConfirm) {\n if (popup.isOpen) {\n e.preventDefault()\n calendarElement.current.keyDown(e)\n }\n }\n if (e.key === 'Escape') {\n e.stopPropagation()\n popup.close()\n const date = new Date(formValue)\n if (!isNaN(date.getTime()))\n updateText(date)\n }\n }\n\n const refocus = (e) => inputRef.current.focus()\n\n const onClick = e => {\n if (disabled) return;\n e.stopPropagation()\n refocus()\n }\n\n const iconClick = e => {\n e.stopPropagation()\n if (popup.isOpen) {\n refocus()\n popup.close()\n } else {\n refocus()\n }\n }\n\n const stopFocusPropagation = (e) => e.stopPropagation()\n\n // const calendarValue = new Date(!isNaN(time) && formValue !== -1 ? offsetedTime : now())\n const calendarValue = new Date(!isNaN(time) && formValue !== -1 ? offsetedTime : nowTimeZoneAdjusted(timezoneOffset))\n calendarValue.setUTCHours(0, 0, 0)\n return <Field helpText={helpText} label={label} mandatory={mandatory} onClick={onClick} onFocus={popup.open} onBlur={_onBlur}>\n <InputAndIconWrapper>\n <TextInput\n raw\n disabled={disabled}\n type={getNumberInputType()}\n tabIndex={tabIndex}\n ref={inputRef}\n constraint={formatDateToPattern(format)}\n value={textValue}\n setValue={setTextValue}\n placeholder={placeholder}\n hasErrors={hasErrors || hasFormatErrors}\n onKeyDown={onKeyDown}\n />\n <DatePickerInputIcon tabIndex={-1} onFocus={stopFocusPropagation} disabled={disabled} onClick={iconClick} icon=\"calendar\" className={isShortcutsEnabled ? \"hasShortcuts\" : \"\"} />\n </InputAndIconWrapper>\n\n {(daysFromNowShortcuts?.length > 0 || monthsFromNowShortcuts?.length > 0) ? \n <ShortcutsWrapper>\n <span>Em:</span>\n {daysFromNowShortcuts?.map((daysFromNow) => (\n <span class=\"link\"\n key={`days-from-now-${daysFromNow}`}\n onClick={() => setDateToNDaysFromNow(daysFromNow)}\n disabled={disabled}\n >\n {daysFromNow} dia{daysFromNow > 1 ? 's' : ''}\n </span>\n ))}\n \n {monthsFromNowShortcuts?.map((monthsFromNow) => (\n <span class=\"link\"\n key={`months-from-now${monthsFromNow}`}\n onClick={() => setDateToNMonthsFromNow(monthsFromNow)}\n disabled={disabled}\n >\n {monthsFromNow} {monthsFromNow > 1 ? 'meses' : 'mês'}\n </span>\n ))}\n </ShortcutsWrapper>\n : null}\n \n {\n popup.isOpen &&\n <DatePickerCalendar\n raw\n min={min}\n max={max}\n level={level}\n weekStartsMonday={weekStartsMonday}\n messages={messages}\n ref={calendarElement}\n updateTransientValue={updateText}\n refocus={refocus}\n onSelectDay={popup.toggle}\n setValue={setValue}\n value={calendarValue.getTime()}\n />\n }\n </Field>\n})\n\n\nconst defaultProps = {\n format: 'dd/MM/yyyy',\n min: new Date(now().setUTCFullYear(now().getUTCFullYear() - 100)),\n max: new Date(now().setUTCFullYear(now().getUTCFullYear() + 100)),\n weekStartsMonday: false\n}\n\n\n\nclass RawDatePickerCalendar extends React.Component {\n\n static defaultProps = defaultProps\n\n constructor(props) {\n super(props)\n this.state = {level: this.props.level || CALENDAR_LEVEL_DAY, currentDate: new Date(props.value || now())}\n }\n\n element\n\n componentDidUpdate(prevProps) {\n if (prevProps.value !== this.props.value) {\n this.setState({\n currentDate: new Date(this.props.value)\n })\n }\n }\n\n setCurrentDatePlus = (n, type) => () => {\n const date = new Date(this.state.currentDate.getTime())\n switch (type) {\n case CALENDAR_LEVEL_DAY:\n date.setUTCDate(date.getUTCDate() + n)\n break\n case CALENDAR_LEVEL_MONTH:\n date.setUTCMonth(date.getUTCMonth() + n)\n break\n case CALENDAR_LEVEL_YEAR:\n date.setUTCFullYear(date.getUTCFullYear() + n)\n break\n default:\n break\n }\n this.props.updateTransientValue && this.props.updateTransientValue(date)\n this.setState({currentDate: date})\n }\n\n up = () => {\n this.setState({level: LEVELS[LEVELS.indexOf(this.state.level) + 1]})\n }\n\n\n keyDown = (e) => {\n const {level, currentDate} = this.state\n const keyMapper = KeyMapper(level)\n if (keyMapper[e.key]) {\n e.preventDefault()\n this.setCurrentDatePlus(keyMapper[e.key], level)()\n }\n if (e.key === 'Enter') {\n e.stopPropagation()\n e.preventDefault()\n this.handleChange(currentDate)\n }\n }\n\n handleChange = (date) => {\n this.props.setValue(date.getTime())\n if (this.state.level === CALENDAR_LEVEL_DAY && this.props.onSelectDay) {\n this.props.onSelectDay()\n }\n this.setState({level: LEVELS[Math.max(LEVELS.indexOf(this.state.level) - 1, 0)]})\n }\n\n getView = () => {\n switch (this.state.level) {\n case CALENDAR_LEVEL_DAY:\n return <Calendar {...this.props} {...this.state} handleChange={this.handleChange}\n changeCurrentDate={this.setCurrentDatePlus} up={this.up}/>\n case CALENDAR_LEVEL_MONTH:\n return <Months {...this.props} {...this.state} handleChange={this.handleChange}\n changeCurrentDate={this.setCurrentDatePlus} up={this.up}/>\n case CALENDAR_LEVEL_YEAR:\n return <Years {...this.props} {...this.state} handleChange={this.handleChange}\n changeCurrentDate={this.setCurrentDatePlus}/>\n default:\n return null\n }\n }\n\n setRef = (e) => {\n this.element = e\n }\n\n render() {\n return (\n <div ref={this.setRef} tabIndex={-1} onFocus={this.props.refocus} onKeyDown={this.keyDown}>\n {this.getView()}\n </div>\n )\n\n }\n}\nconst DatePickerCalendar = enhanceInput(RawDatePickerCalendar)\n\nfunction now() {\n const dt = new Date()\n dt.setUTCHours(0, 0, 0, 0)\n return dt\n}\n\nfunction nowTimeZoneAdjusted(timezoneOffset){\n const timezoneOffsetMilliseconds = timezoneOffset * 3600000; // 3600000 milliseconds in an hour\n const dt = new Date()\n dt.setTime(dt.getTime() + timezoneOffsetMilliseconds);\n dt.setUTCHours(0, 0, 0, 0)\n return dt;\n};\n\nfunction inRange(context, date) {\n return context.min <= date && context.max >= date\n}\n\nconst mapDays = (currentDate, dayOffset, fn) => {\n const month = []\n const iter = new Date(currentDate)\n iter.setUTCDate(1)\n let startDay = dayOffset + iter.getUTCDate() - iter.getUTCDay()\n if (startDay > 1 && startDay < 10) {\n startDay = startDay - 7\n }\n iter.setUTCDate(startDay)\n for (let week = 0; week < 6; week++) {\n for (let day = week * 7; day < (week * 7) + 7; day++) {\n month.push(fn(iter, startDay + day, day))\n iter.setUTCDate(iter.getUTCDate() + 1)\n }\n }\n return month\n}\nconst Calendar = ({messages, max, min, value, currentDate, weekStartsMonday, changeCurrentDate, handleChange, up}) => {\n const currentMonth = currentDate.getUTCMonth()\n const dayOffset = weekStartsMonday ? 1 : 0\n const today = now().getTime()\n const handleDateChange = (e) => {\n const date = new Date(currentDate)\n handleChange(new Date(date.setUTCDate(e.currentTarget.getAttribute('data-day'))))\n }\n const previousMonth = getUTCDateBefore(currentDate.getUTCFullYear(),currentDate.getUTCMonth())\n const nextMonth = getUTCDate(currentDate.getUTCFullYear(),currentDate.getUTCMonth()+1)\n return (\n <DatePickerContainer>\n <CalendarHeader>\n <NavigationButton disabled={!inRange({min,max},previousMonth)} onClick={changeCurrentDate(-1, CALENDAR_LEVEL_MONTH)}>\n <Icon icon=\"arrow-left-line\"/>\n </NavigationButton>\n <TitleButton onClick={up}>{messages('month', currentMonth)} {currentDate.getUTCFullYear()}</TitleButton>\n <NavigationButton disabled={!inRange({min,max},nextMonth)} onClick={changeCurrentDate(1, CALENDAR_LEVEL_MONTH)}>\n <Icon icon=\"arrow-right-line\"/>\n </NavigationButton>\n </CalendarHeader>\n <WeekHeader>\n {[0, 1, 2, 3, 4, 5, 6].map((day) =>\n <span key={day}>{messages('day', (day + dayOffset) % 7).slice(0, 3)}</span>\n )}\n </WeekHeader>\n <CalendarContentContainer>\n\n {mapDays(currentDate, dayOffset, (date, day, index) =>\n <DayItem\n index={index}\n key={date.getTime()}\n onClick={handleDateChange}\n data-day={day}\n isEdge={date.getUTCMonth() !== currentMonth}\n isCurrent={date.getTime() === currentDate.getTime()}\n isSelected={date.getTime() === value}\n isDisabled={!inRange({max, min}, date)}\n isToday={date.getTime() === today}\n >\n {date.getUTCDate()}\n </DayItem>\n )}\n </CalendarContentContainer>\n </DatePickerContainer>\n )\n}\n\nconst getBeginDate = (year,month) => new Date(year,month,1,0,0,0,0)\n\nconst Months = ({currentDate, messages, value, changeCurrentDate, handleChange, up, min, max}) => {\n const currentMonth = currentDate.getUTCMonth()\n const sameYear = currentDate.getUTCFullYear() === new Date(value).getUTCFullYear()\n const selectedMonth = sameYear ? currentDate.getUTCMonth() : undefined\n const handleMonthChange = (e) => {\n const date = new Date(currentDate)\n handleChange(new Date(date.setUTCMonth(e.currentTarget.getAttribute('data-month'))))\n }\n return (\n <DatePickerContainer>\n <CalendarHeader>\n <NavigationButton disabled={!inRange({min,max},getUTCDateBefore(currentDate.getUTCFullYear()))} onClick={changeCurrentDate(-1, CALENDAR_LEVEL_YEAR)}>\n <Icon icon=\"arrow-left-line\"/>\n </NavigationButton>\n <TitleButton onClick={up}>{currentDate.getUTCFullYear()}</TitleButton>\n <NavigationButton disabled={!inRange({min,max},getUTCDate(currentDate.getUTCFullYear()+1))} onClick={changeCurrentDate(1, CALENDAR_LEVEL_YEAR)}>\n <Icon icon=\"arrow-right-line\"/>\n </NavigationButton>\n </CalendarHeader>\n <CalendarContentContainer>\n {[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map((month) =>\n <MonthItem\n disabled={!inRange({min,max},getUTCDate(currentDate.getUTCFullYear(),month)) && !inRange({min,max},getUTCDateBefore(currentDate.getUTCFullYear(),month+1))}\n onClick={handleMonthChange}\n key={month}\n data-month={month}\n index={month}\n isCurrent={currentMonth === month}\n isSelected={selectedMonth === month}\n >\n {messages('month', month).slice(0, 3)}\n </MonthItem>\n )}\n </CalendarContentContainer>\n </DatePickerContainer>\n )\n}\n\n// Given the specified context, produces an HTML string\n// representing months of the year.\n\nfunction mapYears(currentDate, fn) {\n const result = []\n const year = currentDate.getUTCFullYear()\n for (let i = 0; i < (4 * 3); i++) {\n result.push(fn(year - (year % 10) - 1 + i, i < 1 || i > 10, i))\n }\n return result\n}\n\nconst Years = ({value, currentDate, changeCurrentDate, handleChange, min, max}) => {\n const currentYear = currentDate.getUTCFullYear()\n const selectedYear = new Date(value).getUTCFullYear()\n const handleYearChange = (e) => {\n const date = new Date(currentDate)\n handleChange(new Date(date.setUTCFullYear(e.currentTarget.getAttribute('data-year'))))\n }\n return (\n <DatePickerContainer>\n <CalendarHeader>\n <NavigationButton disabled={!inRange({min,max},getUTCDateBefore(currentDate.getUTCFullYear()))} onClick={changeCurrentDate(-10, CALENDAR_LEVEL_YEAR)}>\n <Icon icon=\"arrow-left-line\"/>\n </NavigationButton>\n <TitleButton>{currentYear - (currentYear % 10)}-{currentYear - (currentYear % 10) + 9}</TitleButton>\n <NavigationButton disabled={!inRange({min,max},getUTCDate(currentDate.getUTCFullYear()+10))} onClick={changeCurrentDate(10, CALENDAR_LEVEL_YEAR)}>\n <Icon icon=\"arrow-right-line\"/>\n </NavigationButton>\n </CalendarHeader>\n <CalendarContentContainer>\n {mapYears(currentDate, (year, outside, i) =>\n <YearItem\n key={year}\n onClick={handleYearChange}\n disabled={!inRange({min,max},getUTCDate(year)) && !inRange({min,max},getUTCDateBefore(year+1))}\n data-year={year}\n index={i}\n isCurrent={year === currentYear}\n isSelected={year === selectedYear}\n isEdge={outside}\n >\n {year}\n </YearItem>\n )}\n </CalendarContentContainer>\n </DatePickerContainer>\n )\n}\n\nfunction getClosestNextLeapYear(year) {\n let y = isNaN(year) ? now().getUTCFullYear() : year\n while (!((y % 100 === 0) ? (y % 400 === 0) : (y % 4 === 0))) {\n y++\n }\n return y\n}\n"],"names":["CALENDAR_LEVEL_DAY","CALENDAR_LEVEL_MONTH","CALENDAR_LEVEL_YEAR","LEVELS","injectDatePickerFadeInDownKeyframes","insertKeyframes","DatePickerContainerBase","React","forwardRef","props","ref","createElement","_extends","DatePickerContainer","styled","__yakProps","v","getColor","CalendarHeader","yakDomTag","CalendarContentContainer","WeekHeader","CalendarClickable","TitleButton","NavigationButton","Icon","CalendarContent","css","darken","DayItem","index","MonthItem","YearItem","DatePickerInputIcon","disabled","InputAndIconWrapper","ShortcutsWrapper","KeyMapper","level","upDownSpacing","getUTCDate","year","month","arguments","length","undefined","date","hour","min","sec","ms","Date","UTC","getUTCDateBefore","DatePicker","_ref","maybeInputRef","format","now","setUTCFullYear","getUTCFullYear","max","weekStartsMonday","label","mandatory","tabIndex","helpText","path","timezoneOffset","placeholder","onBlur","raw","daysFromNowShortcuts","monthsFromNowShortcuts","rest","_objectWithoutProperties","_excluded","inputRef","useEnsureRef","formValue","setUnoffsetedFormValue","hasErrors","useInput","_objectSpread","setFormValue","newV","_isFinite","popup","usePopupToggle","calendarElement","useRef","messages","useContext","StartlibsContext","dateMessages","time","Number","offsetedTime","textValue","setRawTextValue","useState","isNaN","formatDate","prevValue","usePrevious","hasFormatErrors","setHasFormatErrors","useEffect","setTimeout","current","setSelectionRange","value","isShortcutsEnabled","setDateToNDaysFromNow","daysFromNow","setUTCDate","getTime","updateText","setDateToNMonthsFromNow","monthsFromNow","setUTCMonth","getUTCMonth","setTextValue","parseDate","nextMonth","closestLeapYear","getClosestNextLeapYear","nextMonthDate","closestLeapYearDate","inRange","setValue","confirmValue","close","_onBlur","e","currentTarget","contains","document","activeElement","callIfFunction","onKeyDown","isConfirm","key","Object","keys","indexOf","isOpen","preventDefault","keyDown","stopPropagation","refocus","focus","onClick","iconClick","stopFocusPropagation","calendarValue","nowTimeZoneAdjusted","setUTCHours","Field","onFocus","open","TextInput","type","getNumberInputType","constraint","formatDateToPattern","icon","className","map","class","DatePickerCalendar","updateTransientValue","onSelectDay","toggle","defaultProps","RawDatePickerCalendar","Component","constructor","element","setCurrentDatePlus","n","state","currentDate","setState","up","keyMapper","handleChange","Math","getView","Calendar","changeCurrentDate","Months","Years","setRef","componentDidUpdate","prevProps","render","enhanceInput","dt","timezoneOffsetMilliseconds","setTime","context","mapDays","dayOffset","fn","iter","startDay","getUTCDay","week","day","push","_ref2","currentMonth","today","handleDateChange","getAttribute","previousMonth","slice","isEdge","isCurrent","isSelected","isDisabled","isToday","_ref3","sameYear","selectedMonth","handleMonthChange","mapYears","result","i","_ref4","currentYear","selectedYear","handleYearChange","outside","y"],"mappings":"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"}
|
|
@@ -0,0 +1,495 @@
|
|
|
1
|
+
import _extends from '@babel/runtime/helpers/extends';
|
|
2
|
+
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
3
|
+
import _identity from 'lodash/fp/identity';
|
|
4
|
+
import _stubFalse from 'lodash/fp/stubFalse';
|
|
5
|
+
import React, { forwardRef, useContext, useEffect, useImperativeHandle, useCallback, useMemo, useRef } from 'react';
|
|
6
|
+
import { usePopupToggle, useToggle, useLazyConstant, StartlibsConsumer, useConsumerCatalog, useRefMemo, useRefState } from '@startlibs/core';
|
|
7
|
+
import { willUseFlipSwitch, Button, ContextMenu, Li, fixDoubledLastMarginBottom } from '@startlibs/components';
|
|
8
|
+
import { Errors } from './Errors.mjs';
|
|
9
|
+
import { FormContext } from './Form.mjs';
|
|
10
|
+
import { FormValue } from './FormValue.mjs';
|
|
11
|
+
import { PathContext } from './enhanceInput.mjs';
|
|
12
|
+
import { useDraftConfirmation } from './useDraftConfirmation.mjs';
|
|
13
|
+
import { styled, css } from '@yak/react';
|
|
14
|
+
import { callIfFunction, _s, stopPropagation, formatPath, lazyValue } from '@startlibs/utils';
|
|
15
|
+
|
|
16
|
+
const _excluded = ["useAnimation"],
|
|
17
|
+
_excluded2 = ["path", "isSingle", "checkIsNew"],
|
|
18
|
+
_excluded3 = ["path", "onCancel", "onClose", "isNew"];
|
|
19
|
+
const addRootPath = (errorRootPath, errors, path) => {
|
|
20
|
+
const rootPath = [].concat(errorRootPath || [], path);
|
|
21
|
+
return Object.keys(errors).reduce((acc, error) => {
|
|
22
|
+
acc[rootPath.concat(error).join('.')] = errors[error];
|
|
23
|
+
return acc;
|
|
24
|
+
}, {});
|
|
25
|
+
};
|
|
26
|
+
const EditableContext = /*#__PURE__*/React.createContext({});
|
|
27
|
+
const ConfirmEditableBoxes = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
28
|
+
let {
|
|
29
|
+
children,
|
|
30
|
+
itemValidation = _stubFalse,
|
|
31
|
+
listValidation = () => false,
|
|
32
|
+
transform = _identity
|
|
33
|
+
} = _ref;
|
|
34
|
+
const submitAll = useCallback(async withLoading => {
|
|
35
|
+
if (withLoading) {
|
|
36
|
+
editableBoxes().forEach(_ => _.loading().open());
|
|
37
|
+
}
|
|
38
|
+
return Promise.all([submitAllShared(), submitAllStandalone()]).then(_ref2 => {
|
|
39
|
+
let [shared, standalone] = _ref2;
|
|
40
|
+
if (withLoading) {
|
|
41
|
+
editableBoxes().forEach(_ => _.loading().close());
|
|
42
|
+
}
|
|
43
|
+
return shared ? standalone ? {
|
|
44
|
+
shared,
|
|
45
|
+
standalone
|
|
46
|
+
} : shared : standalone;
|
|
47
|
+
}).catch(() => withLoading && editableBoxes().forEach(_ => _.loading().close()));
|
|
48
|
+
}, []);
|
|
49
|
+
const [confirmDraftContent, draftToggle, draftConfirmation] = useDraftConfirmation(submitAll);
|
|
50
|
+
useEffect(() => draftToggle.openWith(lazyValue(() => hasModifiedBoxes())), []);
|
|
51
|
+
const [sharedBoxes, sharedBoxesManager] = useConsumerCatalog();
|
|
52
|
+
const [standaloneBoxes, standaloneBoxesManager] = useConsumerCatalog();
|
|
53
|
+
const editableBoxes = boxes => boxes || sharedBoxes().concat(standaloneBoxes());
|
|
54
|
+
const hasEditableBoxes = boxes => editableBoxes(boxes).length > 0;
|
|
55
|
+
const provide = useMemo(() => ({
|
|
56
|
+
sharedBoxes: sharedBoxesManager,
|
|
57
|
+
standaloneBoxes: standaloneBoxesManager,
|
|
58
|
+
itemValidation,
|
|
59
|
+
transform
|
|
60
|
+
}), []);
|
|
61
|
+
const confirm = useCallback(function (cb) {
|
|
62
|
+
let dialogType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'submit-draft';
|
|
63
|
+
return draftConfirmation(dialogType, cb);
|
|
64
|
+
}, [draftConfirmation]);
|
|
65
|
+
const discard = useCallback(cb => draftConfirmation('discard-draft', cb), [draftConfirmation]);
|
|
66
|
+
const modifiedEditablesPath = boxes => modifiedEditableBoxes(boxes).map(_ => callIfFunction(_.path));
|
|
67
|
+
const modifiedEditableBoxes = boxes => editableBoxes(boxes).filter(_ => _.modifiedValue()[1]);
|
|
68
|
+
const hasModifiedBoxes = boxes => modifiedEditableBoxes(boxes).length > 0;
|
|
69
|
+
const submitAllShared = () => {
|
|
70
|
+
if (!sharedBoxes().length) return false;
|
|
71
|
+
const sharedWithForm = sharedBoxes().find(_ => _.form);
|
|
72
|
+
if (!sharedWithForm) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
const {
|
|
76
|
+
form
|
|
77
|
+
} = sharedWithForm.props;
|
|
78
|
+
const validated = modifiedEditableBoxes(sharedBoxes()).reduce((_ref3, box) => {
|
|
79
|
+
let {
|
|
80
|
+
success,
|
|
81
|
+
errors
|
|
82
|
+
} = _ref3;
|
|
83
|
+
const index = callIfFunction(box.path);
|
|
84
|
+
const [newItem, wasModified] = box.modifiedValue();
|
|
85
|
+
const newErrors = wasModified ? itemValidation(newItem, index) : false;
|
|
86
|
+
if (newErrors) {
|
|
87
|
+
return {
|
|
88
|
+
success,
|
|
89
|
+
errors: Object.assign({}, errors, addRootPath(form.meta.errorRootPath, newErrors, index))
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const newProps = _s.set(index, transform(newItem, index), success);
|
|
93
|
+
return {
|
|
94
|
+
success: newProps,
|
|
95
|
+
errors
|
|
96
|
+
};
|
|
97
|
+
}, {
|
|
98
|
+
success: form.getOriginalValues(),
|
|
99
|
+
errors: undefined
|
|
100
|
+
});
|
|
101
|
+
if (validated.errors) {
|
|
102
|
+
form.setErrors(validated.errors);
|
|
103
|
+
return Promise.resolve(validated);
|
|
104
|
+
}
|
|
105
|
+
return form.submitForm(validated.success);
|
|
106
|
+
};
|
|
107
|
+
const submitAllStandalone = () => {
|
|
108
|
+
if (!standaloneBoxes().length) return false;
|
|
109
|
+
const edited = standaloneBoxes().filter(_ => _.form.hasChanged);
|
|
110
|
+
const notValidated = edited.filter(_ => !_.form.validate());
|
|
111
|
+
if (notValidated.length) {
|
|
112
|
+
return Promise.reject({
|
|
113
|
+
errors: notValidated
|
|
114
|
+
});
|
|
115
|
+
} else {
|
|
116
|
+
return Promise.all(edited.map(_ => _.handleSubmit())).then(boxes => {
|
|
117
|
+
const boxesAndResult = boxes.map((_, i) => [edited[i], _, i]);
|
|
118
|
+
boxesAndResult.filter(_ref4 => {
|
|
119
|
+
let [edited, result, i] = _ref4;
|
|
120
|
+
return !result.errors;
|
|
121
|
+
}).forEach(_ref5 => {
|
|
122
|
+
let [_] = _ref5;
|
|
123
|
+
return _.close();
|
|
124
|
+
});
|
|
125
|
+
const failed = boxesAndResult.filter(_ref6 => {
|
|
126
|
+
let [edited, result, i] = _ref6;
|
|
127
|
+
return result.errors;
|
|
128
|
+
});
|
|
129
|
+
if (failed.length) {
|
|
130
|
+
return {
|
|
131
|
+
errors: failed
|
|
132
|
+
};
|
|
133
|
+
} else {
|
|
134
|
+
return {
|
|
135
|
+
success: boxes
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
const methods = useMemo(() => ({
|
|
142
|
+
confirm,
|
|
143
|
+
discard,
|
|
144
|
+
submitAll,
|
|
145
|
+
hasEditableBoxes,
|
|
146
|
+
editableBoxes,
|
|
147
|
+
modifiedEditablesPath
|
|
148
|
+
}), [draftConfirmation]);
|
|
149
|
+
useImperativeHandle(ref, () => methods, [methods]);
|
|
150
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, confirmDraftContent, /*#__PURE__*/React.createElement(EditableContext.Provider, {
|
|
151
|
+
value: provide
|
|
152
|
+
}, callIfFunction(children, methods)));
|
|
153
|
+
});
|
|
154
|
+
const FlipDiv = _ref7 => {
|
|
155
|
+
let {
|
|
156
|
+
useAnimation
|
|
157
|
+
} = _ref7,
|
|
158
|
+
props = _objectWithoutProperties(_ref7, _excluded);
|
|
159
|
+
const ref = useRef();
|
|
160
|
+
useAnimation(ref);
|
|
161
|
+
return /*#__PURE__*/React.createElement("div", _extends({}, props, {
|
|
162
|
+
ref: ref
|
|
163
|
+
}));
|
|
164
|
+
};
|
|
165
|
+
const EditableBoxPresentation = styled(/*#__PURE__*/forwardRef((_ref8, ref) => {
|
|
166
|
+
let {
|
|
167
|
+
view = value => value === undefined || value === null ? '' : String(value),
|
|
168
|
+
tabIndex = 1,
|
|
169
|
+
onClose,
|
|
170
|
+
editingIsOpen,
|
|
171
|
+
onOpen,
|
|
172
|
+
onDelete,
|
|
173
|
+
onCancel,
|
|
174
|
+
onSave,
|
|
175
|
+
onMouseDown,
|
|
176
|
+
onTouchStart,
|
|
177
|
+
resetField,
|
|
178
|
+
children,
|
|
179
|
+
withDelete,
|
|
180
|
+
withContextMenu,
|
|
181
|
+
edit,
|
|
182
|
+
readOnly,
|
|
183
|
+
disabled,
|
|
184
|
+
isNew,
|
|
185
|
+
saveLabel,
|
|
186
|
+
className,
|
|
187
|
+
submitRef,
|
|
188
|
+
path
|
|
189
|
+
} = _ref8;
|
|
190
|
+
const popup = usePopupToggle();
|
|
191
|
+
const editing = useToggle(editingIsOpen);
|
|
192
|
+
const loading = useToggle();
|
|
193
|
+
const form = useContext(FormContext);
|
|
194
|
+
const closeBox = params => {
|
|
195
|
+
callIfFunction(onClose, params);
|
|
196
|
+
editing.close();
|
|
197
|
+
};
|
|
198
|
+
useEffect(() => {
|
|
199
|
+
return () => callIfFunction(onClose, true);
|
|
200
|
+
}, []);
|
|
201
|
+
useEffect(() => {
|
|
202
|
+
if (editing.isOpen) {
|
|
203
|
+
callIfFunction(onOpen);
|
|
204
|
+
}
|
|
205
|
+
}, [editing.isOpen]);
|
|
206
|
+
useImperativeHandle(ref, () => ({
|
|
207
|
+
loading,
|
|
208
|
+
closeBox,
|
|
209
|
+
handleCancel,
|
|
210
|
+
getValue
|
|
211
|
+
}));
|
|
212
|
+
const handleDelete = e => {
|
|
213
|
+
if (e) e.preventDefault();
|
|
214
|
+
onDelete();
|
|
215
|
+
};
|
|
216
|
+
const tryClose = e => {
|
|
217
|
+
if (e.key === 'Escape' && editing.isOpen) {
|
|
218
|
+
e.preventDefault();
|
|
219
|
+
e.stopPropagation();
|
|
220
|
+
handleCancel();
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
const handleCancel = () => {
|
|
224
|
+
onCancel(closeBox);
|
|
225
|
+
};
|
|
226
|
+
const onSubmit = e => {
|
|
227
|
+
if (e) e.preventDefault();
|
|
228
|
+
loading.wait(() => onSave().then(() => closeBox(true)).catch(() => {}));
|
|
229
|
+
};
|
|
230
|
+
const getPath = extraPath => _s.toPath(path).concat(_s.toPath(extraPath));
|
|
231
|
+
const getValue = (extraPath, otherProps) => otherProps ? _s.get(getPath(extraPath), otherProps) : form.getValue(getPath(extraPath));
|
|
232
|
+
const setValue = (value, extraPath) => form.setValue(getPath(extraPath), value);
|
|
233
|
+
const flipAnimation = useLazyConstant(willUseFlipSwitch);
|
|
234
|
+
const disabledClick = readOnly || disabled;
|
|
235
|
+
const openBox = () => {
|
|
236
|
+
editing.open();
|
|
237
|
+
};
|
|
238
|
+
const formattedPath = getPath();
|
|
239
|
+
return /*#__PURE__*/React.createElement(PathContext.Provider, {
|
|
240
|
+
value: formattedPath
|
|
241
|
+
}, /*#__PURE__*/React.createElement(FlipDiv, {
|
|
242
|
+
key: editing.isOpen,
|
|
243
|
+
useAnimation: flipAnimation,
|
|
244
|
+
onKeyDown: tryClose,
|
|
245
|
+
onMouseDown: onMouseDown,
|
|
246
|
+
onTouchStart: onTouchStart,
|
|
247
|
+
className: 'editable-box ' + (!disabledClick ? 'clickable ' : '') + (editing.isOpen ? 'expanded' : 'collapsed') + ' ' + className,
|
|
248
|
+
onClick: editing.isOpen || disabledClick ? undefined : openBox
|
|
249
|
+
}, !editing.isOpen && !disabledClick && !(withDelete || withContextMenu) && /*#__PURE__*/React.createElement(Button, {
|
|
250
|
+
tabIndex: tabIndex,
|
|
251
|
+
className: "edit-button",
|
|
252
|
+
small: true,
|
|
253
|
+
onlyIcon: true,
|
|
254
|
+
icon: "edit"
|
|
255
|
+
}), !editing.isOpen && !disabledClick && (withDelete || withContextMenu) && /*#__PURE__*/React.createElement(Button, {
|
|
256
|
+
tabIndex: tabIndex,
|
|
257
|
+
className: "edit-button arrow-down",
|
|
258
|
+
small: true,
|
|
259
|
+
onlyIcon: true,
|
|
260
|
+
icon: "arrow-down",
|
|
261
|
+
onClick: stopPropagation(popup.toggle)
|
|
262
|
+
}, popup.isOpen && /*#__PURE__*/React.createElement(ContextMenu, null, /*#__PURE__*/React.createElement(Li, {
|
|
263
|
+
label: "Editar",
|
|
264
|
+
icon: "edit-line",
|
|
265
|
+
onClick: openBox
|
|
266
|
+
}), withContextMenu, withDelete && /*#__PURE__*/React.createElement(Li, {
|
|
267
|
+
label: "Deletar",
|
|
268
|
+
icon: "remove",
|
|
269
|
+
onClick: handleDelete
|
|
270
|
+
}))), /*#__PURE__*/React.createElement("form", {
|
|
271
|
+
onSubmit: onSubmit
|
|
272
|
+
}, /*#__PURE__*/React.createElement(FormValue, {
|
|
273
|
+
path: formattedPath,
|
|
274
|
+
key: formatPath(formattedPath)
|
|
275
|
+
}, value => fixDoubledLastMarginBottom(editing.isOpen ? edit(value, {
|
|
276
|
+
getPath,
|
|
277
|
+
getValue,
|
|
278
|
+
path: formattedPath,
|
|
279
|
+
tabIndex,
|
|
280
|
+
setValue
|
|
281
|
+
}) : view(value, {
|
|
282
|
+
getPath,
|
|
283
|
+
getValue,
|
|
284
|
+
path: formattedPath
|
|
285
|
+
}))), /*#__PURE__*/React.createElement(Errors, {
|
|
286
|
+
path: formattedPath
|
|
287
|
+
}), editing.isOpen && /*#__PURE__*/React.createElement("div", {
|
|
288
|
+
className: "editable-box-footer"
|
|
289
|
+
}, /*#__PURE__*/React.createElement("div", null, withDelete && /*#__PURE__*/React.createElement(Button, {
|
|
290
|
+
icon: "remove",
|
|
291
|
+
hover: "alert",
|
|
292
|
+
tabIndex: tabIndex + 2,
|
|
293
|
+
onClick: handleDelete
|
|
294
|
+
}, "Deletar")), /*#__PURE__*/React.createElement(StartlibsConsumer, null, _ref9 => {
|
|
295
|
+
let {
|
|
296
|
+
labels
|
|
297
|
+
} = _ref9;
|
|
298
|
+
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
|
|
299
|
+
tabIndex: tabIndex + 1,
|
|
300
|
+
onClick: handleCancel
|
|
301
|
+
}, labels.EditableBox.cancel), /*#__PURE__*/React.createElement(Button, {
|
|
302
|
+
buttonRef: submitRef,
|
|
303
|
+
isLoading: loading.isOpen,
|
|
304
|
+
highlight: true,
|
|
305
|
+
tabIndex: tabIndex,
|
|
306
|
+
type: "submit"
|
|
307
|
+
}, callIfFunction(saveLabel, isNew) || (isNew ? labels.EditableBox.saveNew : labels.EditableBox.save)));
|
|
308
|
+
}))), children));
|
|
309
|
+
}))`
|
|
310
|
+
${props => props.disabled && css`opacity: 0.7;`}
|
|
311
|
+
`;
|
|
312
|
+
const SharedEditableTabBox = _ref0 => {
|
|
313
|
+
let {
|
|
314
|
+
path,
|
|
315
|
+
isSingle,
|
|
316
|
+
checkIsNew = (a, b) => a !== b
|
|
317
|
+
} = _ref0,
|
|
318
|
+
props = _objectWithoutProperties(_ref0, _excluded2);
|
|
319
|
+
const editableGroup = useContext(EditableContext);
|
|
320
|
+
const form = useContext(FormContext);
|
|
321
|
+
const isNew = useRefState(() => isSingle ? false : checkIsNew(_s.get(path, form.getOriginalValues()), form.getValue(path)));
|
|
322
|
+
const internalBox = React.useRef();
|
|
323
|
+
const pathRef = useRefMemo(path);
|
|
324
|
+
const loading = () => internalBox.current.loading;
|
|
325
|
+
const modifiedValue = () => {
|
|
326
|
+
const oldItem = internalBox.current.getValue(undefined, form.getOriginalValues());
|
|
327
|
+
const newItem = internalBox.current.getValue();
|
|
328
|
+
return newItem !== oldItem ? [newItem, true] : [oldItem, false];
|
|
329
|
+
};
|
|
330
|
+
const selfRef = useRef({
|
|
331
|
+
loading,
|
|
332
|
+
path: () => pathRef.current,
|
|
333
|
+
form,
|
|
334
|
+
modifiedValue
|
|
335
|
+
});
|
|
336
|
+
const resetField = () => form.resetField([].concat(path));
|
|
337
|
+
const onClose = skipReset => {
|
|
338
|
+
if (!skipReset) {
|
|
339
|
+
resetField();
|
|
340
|
+
}
|
|
341
|
+
form.clearErrors(_s.toPath(path));
|
|
342
|
+
editableGroup.sharedBoxes.unregister(selfRef.current);
|
|
343
|
+
isNew.set(false);
|
|
344
|
+
};
|
|
345
|
+
const onOpen = () => {
|
|
346
|
+
editableGroup.sharedBoxes.register(selfRef.current);
|
|
347
|
+
};
|
|
348
|
+
const validate = (props, path) => {
|
|
349
|
+
const errors = editableGroup.itemValidation(props, path);
|
|
350
|
+
if (errors) {
|
|
351
|
+
form.setErrors(addRootPath(form.getMeta('errorRootPath'), errors, path));
|
|
352
|
+
}
|
|
353
|
+
return errors;
|
|
354
|
+
};
|
|
355
|
+
const onSave = () => {
|
|
356
|
+
const [newItem, wasModified] = modifiedValue();
|
|
357
|
+
if (!wasModified) {
|
|
358
|
+
internalBox.current.closeBox();
|
|
359
|
+
return Promise.resolve({});
|
|
360
|
+
}
|
|
361
|
+
const errors = validate(newItem, path);
|
|
362
|
+
if (errors) {
|
|
363
|
+
return Promise.reject({
|
|
364
|
+
errors
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
const transform = editableGroup.transform;
|
|
368
|
+
if (isNew.get()) {
|
|
369
|
+
const arrayPath = _s.toPath(path);
|
|
370
|
+
const index = arrayPath.slice(-1);
|
|
371
|
+
const newProps = _s.update(arrayPath.slice(0, -1), _s.insertAt(index, transform(newItem, path)), form.getOriginalValues());
|
|
372
|
+
return form.submitForm(newProps);
|
|
373
|
+
} else {
|
|
374
|
+
const newProps = _s.set(path, transform(newItem, path), form.getOriginalValues());
|
|
375
|
+
return form.submitForm(newProps);
|
|
376
|
+
}
|
|
377
|
+
};
|
|
378
|
+
const onDelete = () => {
|
|
379
|
+
if (isNew.get()) {
|
|
380
|
+
onCancel();
|
|
381
|
+
return Promise.resolve({
|
|
382
|
+
success: true
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
const original = form.getOriginalValues();
|
|
386
|
+
const newProps = _s.unsetOrRemoveAt(path, original);
|
|
387
|
+
if (_s.get(_s.toPath(path).slice(0, -1), original).length !== _s.get(_s.toPath(path).slice(0, -1), newProps).length) {
|
|
388
|
+
internalBox.current.loading.open();
|
|
389
|
+
const fetch = form.submitForm(newProps);
|
|
390
|
+
fetch.then(_ref1 => {
|
|
391
|
+
let {
|
|
392
|
+
errors
|
|
393
|
+
} = _ref1;
|
|
394
|
+
internalBox.current.loading.close();
|
|
395
|
+
if (!errors) {
|
|
396
|
+
form.setValues(_s.unsetOrRemoveAt(path));
|
|
397
|
+
}
|
|
398
|
+
}).catch(() => internalBox.current.loading.close());
|
|
399
|
+
return fetch;
|
|
400
|
+
} else {
|
|
401
|
+
internalBox.current.handleCancel();
|
|
402
|
+
return Promise.resolve({
|
|
403
|
+
success: true
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
};
|
|
407
|
+
const onCancel = close => {
|
|
408
|
+
const lastKey = Array.isArray(path) ? path.slice(-1)[0] : path;
|
|
409
|
+
Array.isArray(path) ? path.slice(0, path.length - 1) : [];
|
|
410
|
+
if (isNew.get() && typeof lastKey === 'number') {
|
|
411
|
+
form.setValues(_s.unsetOrRemoveAt(path));
|
|
412
|
+
} else {
|
|
413
|
+
form.resetField(path);
|
|
414
|
+
close();
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
return /*#__PURE__*/React.createElement(EditableBoxPresentation, _extends({
|
|
418
|
+
ref: internalBox,
|
|
419
|
+
resetField: resetField,
|
|
420
|
+
onOpen: onOpen,
|
|
421
|
+
onClose: onClose,
|
|
422
|
+
onDelete: onDelete,
|
|
423
|
+
onCancel: onCancel,
|
|
424
|
+
onSave: onSave,
|
|
425
|
+
form: editableGroup.form,
|
|
426
|
+
isNew: isNew.get(),
|
|
427
|
+
path: path
|
|
428
|
+
}, props));
|
|
429
|
+
};
|
|
430
|
+
const EditableBox = _ref10 => {
|
|
431
|
+
let {
|
|
432
|
+
path,
|
|
433
|
+
onCancel,
|
|
434
|
+
onClose,
|
|
435
|
+
isNew
|
|
436
|
+
} = _ref10,
|
|
437
|
+
props = _objectWithoutProperties(_ref10, _excluded3);
|
|
438
|
+
const editableGroup = useContext(EditableContext);
|
|
439
|
+
const form = useContext(FormContext);
|
|
440
|
+
const internalBox = React.useRef();
|
|
441
|
+
const resetField = () => path ? form.resetField(_s.toPath(path)) : form.resetForm();
|
|
442
|
+
const _onClose = skipReset => {
|
|
443
|
+
if (!skipReset) {
|
|
444
|
+
resetField();
|
|
445
|
+
}
|
|
446
|
+
form.clearErrors(path);
|
|
447
|
+
editableGroup.standaloneBoxes.unregister(selfRef.current);
|
|
448
|
+
callIfFunction(onClose);
|
|
449
|
+
};
|
|
450
|
+
const modifiedValue = () => {
|
|
451
|
+
const oldItem = internalBox.current.getValue(undefined, form.getOriginalValues());
|
|
452
|
+
const newItem = internalBox.current.getValue();
|
|
453
|
+
return newItem !== oldItem ? [newItem, true] : [oldItem, false];
|
|
454
|
+
};
|
|
455
|
+
const onOpen = () => {
|
|
456
|
+
editableGroup.standaloneBoxes.register(selfRef.current);
|
|
457
|
+
};
|
|
458
|
+
const onDelete = () => {
|
|
459
|
+
props.removeItem(props.menuId);
|
|
460
|
+
};
|
|
461
|
+
const _onCancel = close => {
|
|
462
|
+
if (callIfFunction(onCancel, close) !== false) {
|
|
463
|
+
close();
|
|
464
|
+
}
|
|
465
|
+
};
|
|
466
|
+
const close = () => internalBox.current.closeBox();
|
|
467
|
+
const onSave = () => form.submitForm();
|
|
468
|
+
const handleSubmit = () => form.handleSubmit();
|
|
469
|
+
const loading = () => internalBox.current.loading;
|
|
470
|
+
const pathRef = useRefMemo(path);
|
|
471
|
+
const selfRef = useRef({
|
|
472
|
+
loading,
|
|
473
|
+
path: () => pathRef.current,
|
|
474
|
+
form,
|
|
475
|
+
modifiedValue,
|
|
476
|
+
handleSubmit,
|
|
477
|
+
close
|
|
478
|
+
});
|
|
479
|
+
return /*#__PURE__*/React.createElement(EditableBoxPresentation, _extends({
|
|
480
|
+
ref: internalBox,
|
|
481
|
+
resetField: resetField,
|
|
482
|
+
onOpen: onOpen,
|
|
483
|
+
onClose: _onClose,
|
|
484
|
+
onDelete: onDelete,
|
|
485
|
+
onCancel: _onCancel,
|
|
486
|
+
onSave: onSave,
|
|
487
|
+
form: form,
|
|
488
|
+
path: path,
|
|
489
|
+
isNew: isNew
|
|
490
|
+
}, props));
|
|
491
|
+
};
|
|
492
|
+
EditableBox.Shared = SharedEditableTabBox;
|
|
493
|
+
|
|
494
|
+
export { ConfirmEditableBoxes, EditableBox };
|
|
495
|
+
//# sourceMappingURL=EditableBox.mjs.map
|