{"version":3,"file":"datePartsPicker.js","sources":["../../../Framework/Controls/datePartsPicker.ts"],"sourcesContent":["// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nimport { defineComponent, PropType } from \"vue\";\r\nimport { normalizeRules, rulesPropType, ValidationRule } from \"@Obsidian/ValidationRules\";\r\nimport DateKey from \"@Obsidian/Utility/dateKey\";\r\nimport { toNumber, toNumberOrNull } from \"@Obsidian/Utility/numberUtils\";\r\nimport { RockDateTime } from \"@Obsidian/Utility/rockDateTime\";\r\nimport RockFormField from \"./rockFormField\";\r\n\r\nexport type DatePartsPickerValue = {\r\n year: number;\r\n month: number;\r\n day: number;\r\n};\r\n\r\nexport function getDefaultDatePartsPickerModel(): DatePartsPickerValue {\r\n return {\r\n year: 0,\r\n month: 0,\r\n day: 0\r\n };\r\n}\r\n\r\nexport default defineComponent({\r\n name: \"DatePartsPicker\",\r\n components: {\r\n RockFormField\r\n },\r\n props: {\r\n rules: rulesPropType,\r\n modelValue: {\r\n type: Object as PropType,\r\n required: false\r\n },\r\n requireYear: {\r\n type: Boolean as PropType,\r\n default: true\r\n },\r\n showYear: {\r\n type: Boolean as PropType,\r\n default: true\r\n },\r\n hideDay: {\r\n type: Boolean as PropType,\r\n default: false\r\n },\r\n allowFutureDates: {\r\n type: Boolean as PropType,\r\n default: true\r\n },\r\n futureYearCount: {\r\n type: Number as PropType,\r\n default: 50\r\n },\r\n startYear: {\r\n type: Number as PropType,\r\n default: 1900\r\n },\r\n disabled: {\r\n type: String as PropType\r\n }\r\n },\r\n\r\n data() {\r\n return {\r\n internalDay: \"0\",\r\n internalMonth: \"0\",\r\n internalYear: \"0\",\r\n days: [] as Array\r\n };\r\n },\r\n\r\n methods: {\r\n getValue(): DatePartsPickerValue {\r\n return {\r\n day: toNumber(this.internalDay),\r\n month: toNumber(this.internalMonth),\r\n year: toNumber(this.internalYear)\r\n };\r\n },\r\n\r\n updateDays(): void {\r\n let dayCount = 31;\r\n\r\n const year = toNumber(this.internalYear);\r\n const month = toNumber(this.internalMonth);\r\n if (this.showYear && year > 0 && month > 0) {\r\n dayCount = RockDateTime.fromParts(year, month, 1)?.addMonths(1)?.addDays(-1)?.day ?? 31;\r\n }\r\n else if ([1, 3, 5, 7, 8, 10, 12].indexOf(month) !== -1) {\r\n dayCount = 31;\r\n }\r\n else if ([4, 6, 9, 11].indexOf(month) !== -1) {\r\n dayCount = 30;\r\n }\r\n else if (month === 2) {\r\n dayCount = 29;\r\n }\r\n\r\n const days: Array = [];\r\n for (let day = 1; day <= dayCount; day++) {\r\n days.push(day.toString());\r\n }\r\n\r\n this.days = days;\r\n }\r\n },\r\n\r\n computed: {\r\n computedRequireYear(): boolean {\r\n return this.showYear && this.requireYear;\r\n },\r\n\r\n internalDateKey (): string {\r\n if ((!this.modelValue?.year ?? 0) && !this.computedRequireYear) {\r\n const dateKey = DateKey.toNoYearDateKey(this.modelValue?.month ?? 0, this.modelValue?.day ?? 0);\r\n \r\n return dateKey;\r\n }\r\n\r\n const dateKey = DateKey.toDateKey(this.modelValue?.year ?? 0, this.modelValue?.month ?? 0, this.modelValue?.day ?? 0);\r\n return dateKey;\r\n },\r\n computedRules(): ValidationRule[] {\r\n const rules = normalizeRules(this.rules);\r\n\r\n if (rules.indexOf(\"required\") !== -1 && rules.indexOf(\"datekey\") === -1) {\r\n rules.push(\"datekey\");\r\n }\r\n\r\n return rules;\r\n },\r\n years(): string[] {\r\n const years: string[] = [];\r\n let year = RockDateTime.now().year;\r\n\r\n if (this.futureYearCount > 0 && this.allowFutureDates) {\r\n year += this.futureYearCount;\r\n }\r\n\r\n while (year >= 1900) {\r\n years.push(year.toString());\r\n year--;\r\n }\r\n\r\n return years;\r\n },\r\n },\r\n\r\n watch: {\r\n modelValue: {\r\n immediate: true,\r\n handler(): void {\r\n this.internalDay = this.modelValue?.day.toString() ?? \"0\";\r\n this.internalMonth = this.modelValue?.month.toString() ?? \"0\";\r\n this.internalYear = this.modelValue?.year.toString() ?? \"0\";\r\n this.updateDays();\r\n }\r\n },\r\n\r\n showYear: {\r\n immediate: true,\r\n handler(): void {\r\n this.updateDays();\r\n }\r\n },\r\n\r\n internalDay(): void {\r\n this.$emit(\"update:modelValue\", this.getValue());\r\n },\r\n\r\n internalMonth(): void {\r\n const day = toNumberOrNull(this.internalDay);\r\n\r\n this.updateDays();\r\n\r\n if (day != null && day >= this.days.length + 1) {\r\n this.internalDay = this.days.length.toString();\r\n }\r\n else {\r\n this.$emit(\"update:modelValue\", this.getValue());\r\n }\r\n },\r\n\r\n internalYear(): void {\r\n const day = toNumberOrNull(this.internalDay);\r\n\r\n this.updateDays();\r\n\r\n if (day != null && day >= this.days.length + 1) {\r\n this.internalDay = this.days.length.toString();\r\n }\r\n else {\r\n this.$emit(\"update:modelValue\", this.getValue());\r\n }\r\n },\r\n },\r\n\r\n template: `\r\n\r\n \r\n`\r\n});\r\n"],"names":["getDefaultDatePartsPickerModel","year","month","day","defineComponent","name","components","RockFormField","props","rules","rulesPropType","modelValue","type","Object","required","requireYear","Boolean","default","showYear","hideDay","allowFutureDates","futureYearCount","Number","startYear","disabled","String","data","internalDay","internalMonth","internalYear","days","methods","getValue","toNumber","updateDays","dayCount","_RockDateTime$fromPar","_RockDateTime$fromPar2","_RockDateTime$fromPar3","_RockDateTime$fromPar4","RockDateTime","fromParts","addMonths","addDays","indexOf","push","toString","computed","computedRequireYear","internalDateKey","_this$modelValue$year","_this$modelValue","_this$modelValue$year2","_this$modelValue4","_this$modelValue$mont2","_this$modelValue5","_this$modelValue$day2","_this$modelValue6","_this$modelValue$mont","_this$modelValue2","_this$modelValue$day","_this$modelValue3","dateKey","DateKey","toNoYearDateKey","toDateKey","computedRules","normalizeRules","years","now","watch","immediate","handler","_this$modelValue$day$","_this$modelValue7","_this$modelValue$mont3","_this$modelValue8","_this$modelValue$year3","_this$modelValue9","$emit","toNumberOrNull","length","template"],"mappings":"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"}