refine-rails 2.9.0 → 2.9.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"file":"refine-stimulus.js","sources":["../../../node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","../../javascript/controllers/refine/server-refresh-controller.js","../../javascript/controllers/refine/add-controller.js","../../javascript/controllers/refine/inline-conditions-controller.js","../../javascript/controllers/refine/criterion-form-controller.js","../../javascript/controllers/refine/defaults-controller.js","../../javascript/controllers/refine/delete-controller.js","../../javascript/controllers/refine/filter-pills-controller.js","../../javascript/controllers/refine/popup-controller.js","../../javascript/controllers/refine/search-filter-controller.js","../../javascript/refine/helpers/index.js","../../javascript/controllers/refine/state-controller.js","../../javascript/controllers/refine/stored-filter-controller.js","../../javascript/controllers/refine/submit-form-controller.js","../../javascript/controllers/refine/toggle-controller.js","../../javascript/controllers/refine/turbo-stream-form-controller.js","../../javascript/controllers/refine/turbo-stream-link-controller.js","../../javascript/controllers/refine/update-controller.js","../../javascript/controllers/refine/date-controller.js","../../javascript/controllers/index.js"],"sourcesContent":["/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n\n// Base class for controllers that reload form content from the server\nexport default class extends Controller {\n connect() {\n this.state.finishUpdate()\n }\n\n get state() {\n let currentElement = this.element\n\n while(currentElement !== document.body) {\n if (currentElement.matches('[data-controller~=\"refine--state\"]'))\n return this.application.getControllerForElementAndIdentifier(currentElement, 'refine--state')\n else {\n currentElement = currentElement.parentNode\n }\n }\n\n return null\n }\n\n async refreshFromServer(options = {}) {\n const { includeErrors } = options\n this.state.startUpdate()\n const request = new FetchRequest(\n \"GET\",\n this.state.refreshUrlValue,\n {\n responseKind: \"turbo-stream\",\n query: {\n \"refine_filters_builder[filter_class]\": this.state.filterName,\n \"refine_filters_builder[blueprint_json]\": JSON.stringify(this.state.blueprint),\n \"refine_filters_builder[client_id]\": this.state.clientIdValue,\n include_errors: !!includeErrors\n }\n }\n )\n await request.perform()\n }\n}\n","import ServerRefreshController from './server-refresh-controller'\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends ServerRefreshController {\n static values = {\n previousCriterionId: Number,\n }\n\n async criterion() {\n const isValid = await this.validateBlueprint()\n if (isValid) {\n this.state.addCriterion(this.previousCriterionIdValue)\n }\n this.refreshFromServer({includeErrors: !isValid})\n }\n\n async group() {\n const isValid = await this.validateBlueprint()\n if (isValid) {\n this.state.addGroup()\n }\n this.refreshFromServer({includeErrors: !isValid})\n }\n\n async validateBlueprint(blueprint) {\n const { state } = this\n\n const request = new FetchRequest(\n \"GET\",\n this.state.validateBlueprintUrlValue,\n {\n query: {\n \"refine_filters_builder[filter_class]\": this.state.filterName,\n \"refine_filters_builder[blueprint_json]\": JSON.stringify(this.state.blueprint),\n \"refine_filters_builder[client_id]\": this.state.clientIdValue\n }\n }\n )\n const response = await request.perform()\n return response.ok\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n\n static targets = ['condition', 'category']\n\n filterConditions(event) {\n const query = event.currentTarget.value.toLowerCase()\n const visibleCategories = new Set()\n\n // hide / show condition links that match the query and note which\n // categories should be visible\n this.conditionTargets.forEach(conditionNode => {\n const conditionName = conditionNode.innerHTML.toLowerCase()\n if (conditionName.includes(query)) {\n conditionNode.hidden = false\n visibleCategories.add(conditionNode.dataset.category)\n } else {\n conditionNode.hidden = true\n }\n })\n\n // hide / show category headers that have\n this.categoryTargets.forEach(categoryNode => {\n const categoryName = categoryNode.innerHTML\n if (visibleCategories.has(categoryName)) {\n categoryNode.hidden = false\n } else {\n categoryNode.hidden = true\n }\n })\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n/*\n This controller handles criteria forms\n (refine/inline/criteria/new|edit)\n*/\nexport default class extends Controller {\n static values = {\n url: String,\n turboFrame: String,\n method: { type: String, default: \"POST\" }\n }\n\n refresh(_event) {\n // update the url with params from the form\n const formData = new FormData(this.element)\n const url = new URL(this.urlValue)\n\n for (const [name, value] of formData.entries()) {\n console.log(name, value)\n url.searchParams.set(name, value)\n }\n\n // navigate the modal to refresh the form\n window.Turbo.visit(url.toString(), {frame: this.turboFrameValue})\n }\n\n\n\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = {\n criterionId: Number,\n input: Object,\n };\n\n connect() {\n this.state = this.getStateController()\n\n this.state.updateInput(\n this.criterionIdValue,\n this.inputValue,\n );\n }\n\n getStateController() {\n let currentElement = this.element\n\n while(currentElement !== document.body) {\n const controller = this.application.getControllerForElementAndIdentifier(currentElement, 'refine--state')\n if (controller) {\n return controller\n } else {\n currentElement = currentElement.parentNode\n }\n }\n\n return null\n }\n}\n","import ServerRefreshController from './server-refresh-controller';\n\nexport default class extends ServerRefreshController {\n static values = {\n criterionId: Number,\n }\n\n criterion() {\n const { state, criterionIdValue } = this;\n state.deleteCriterion(criterionIdValue);\n this.refreshFromServer()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends Controller {\n static values = {\n submitUrl: String\n }\n\n connect() {\n const urlParams = new URLSearchParams(window.location.search)\n this.existingParams = urlParams\n this.existingParams.delete('stable_id')\n }\n\n delete(event) {\n const { criterionId } = event.currentTarget.dataset\n var index = parseInt(criterionId)\n this.stateController.deleteCriterion(index)\n this.reloadPage()\n }\n\n async reloadPage() {\n const {blueprint} = this.stateController\n const request = new FetchRequest(\n \"POST\",\n this.submitUrlValue,\n {\n responseKind: \"turbo-stream\",\n body: JSON.stringify({\n refine_filters_builder: {\n filter_class: this.stateController.filterName,\n blueprint_json: JSON.stringify(blueprint),\n client_id: this.stateController.clientIdValue\n }\n })\n }\n )\n await request.perform()\n }\n\n redirectToStableId(stableId) {\n const params = new URLSearchParams()\n if (stableId) {\n params.append('stable_id', stableId)\n }\n const allParams = new URLSearchParams({\n ...Object.fromEntries(this.existingParams),\n ...Object.fromEntries(params),\n }).toString()\n const url = `${window.location.pathname}?${allParams}`\n\n history.pushState({}, document.title, url)\n window.location.reload()\n }\n\n get stateController() {\n return this.element.refineStateController\n }\n\n get stabilizeFilterController() {\n return this.element.stabilizeFilterController\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { useClickOutside } from 'stimulus-use'\n\n// simple controller to hide/show the filter modal\nexport default class extends Controller {\n static targets = [\"frame\"]\n\n static values = {\n src: String,\n isOpen: {type: Boolean, default: false}\n }\n\n connect() {\n useClickOutside(this)\n this.boundHandleKeyUp = this.handleKeyUp.bind(this)\n document.addEventListener(\"keyup\", this.boundHandleKeyUp)\n }\n\n disconnect() {\n document.removeEventListener(\"keyup\", this.boundHandleKeyUp)\n }\n\n show(event) {\n event.preventDefault()\n this.frameTarget.src = this.srcValue;\n this.isOpenValue = true\n }\n\n hide(event) {\n if (this.isOpenValue) {\n event?.preventDefault()\n this.frameTarget.innerHTML = \"\";\n this.isOpenValue = false\n }\n }\n\n clickOutside(event) {\n this.hide(event)\n }\n\n handleKeyUp(event) {\n if (event.key === \"Escape\" || event.key === \"Esc\") {\n this.hide(event)\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends Controller {\n static values = {\n submitUrl: String\n }\n\n\n search(event) {\n event.preventDefault()\n this.submitFilter()\n document.activeElement.blur()\n }\n\n async submitFilter() {\n const {blueprint} = this.stateController\n const request = new FetchRequest(\n \"POST\",\n this.submitUrlValue,\n {\n responseKind: \"turbo-stream\",\n body: JSON.stringify({\n refine_filters_builder: {\n filter_class: this.stateController.filterName,\n blueprint_json: JSON.stringify(blueprint),\n client_id: this.stateController.clientIdValue\n }\n })\n }\n )\n await request.perform()\n }\n\n get stateController() {\n return this\n .element\n .querySelector('[data-controller~=\"refine--state\"]')\n .refineStateController\n }\n\n loadResults({detail: {url}}) {\n console.log(\"filter submit success\")\n if (window.Turbo) {\n window.Turbo.visit(url)\n } else {\n window.location.href = url\n }\n }\n}\n","// Polyfill for custom events in IE9-11\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#polyfill\n;(function () {\n if (typeof window.CustomEvent === 'function') return false\n\n function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined }\n var evt = document.createEvent('CustomEvent')\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail)\n return evt\n }\n\n CustomEvent.prototype = window.Event.prototype\n\n window.CustomEvent = CustomEvent\n\n // eslint expects a return here\n return true\n})()\n\nexport const filterStabilizedEvent = (element, stableId, filterName) => {\n const event = new CustomEvent('filter-stabilized', {\n bubbles: true,\n cancelable: true,\n detail: {\n stableId,\n filterName,\n },\n })\n element.dispatchEvent(event)\n}\n\nexport const filterUnstableEvent = (blueprint) => {\n const event = new CustomEvent('filter-unstable', {\n bubbles: true,\n cancelable: true,\n detail: {\n blueprint,\n },\n })\n window.dispatchEvent(event)\n}\n\nexport const filterInvalidEvent = ({blueprint, errors}) => {\n const event = new CustomEvent('filter-invalid', {\n bubbles: true,\n cancelable: true,\n detail: {\n blueprint,\n errors,\n },\n })\n window.dispatchEvent(event)\n}\n\nexport const filterStoredEvent = (storedFilterId) => {\n const event = new CustomEvent('filter-stored', {\n bubbles: true,\n cancelable: true,\n detail: {\n storedFilterId,\n },\n })\n window.dispatchEvent(event)\n}\n\nexport const blueprintUpdatedEvent = (element, {blueprint, formId}) => {\n const event = new CustomEvent('blueprint-updated', {\n bubbles: true,\n cancelable: true,\n detail: {\n blueprint,\n formId\n },\n })\n element.dispatchEvent(event)\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { delegate, abnegate } from 'jquery-events-to-dom-events'\nimport { blueprintUpdatedEvent } from '../../refine/helpers'\nimport { isEqual } from 'lodash'\n\nconst criterion = (id, depth, condition) => {\n const component = condition?.component\n const meta = condition?.meta || { clauses: [], options: {}}\n const refinements = condition?.refinements || []\n const { clauses, options } = meta\n let selected\n if (component === 'option-condition') {\n selected = options[0] ? [options[0].id] : []\n } else {\n selected = undefined\n }\n // Set newInput based on component\n\n let newInput = {\n clause: clauses[0]?.id,\n selected: selected,\n }\n\n // If refinements are present, add to input array\n refinements.forEach((refinement) => {\n const { meta, component } = refinement\n const { clauses, options } = meta\n let selected\n if (component === 'option-condition') {\n selected = options[0] ? [options[0].id] : []\n } else {\n selected = undefined\n }\n newInput[refinement.id] = {\n clause: clauses[0].id,\n selected: selected,\n }\n })\n\n return {\n depth,\n type: 'criterion',\n condition_id: id,\n input: newInput,\n }\n}\n\nconst or = function (depth) {\n depth = depth === undefined ? 0 : depth\n return {\n depth,\n type: 'conjunction',\n word: 'or',\n }\n}\n\nconst and = function (depth) {\n depth = depth === undefined ? 1 : depth\n return {\n depth,\n type: 'conjunction',\n word: 'and',\n }\n}\nexport default class extends Controller {\n static values = {\n blueprint: Array,\n conditions: Array,\n className: String,\n refreshUrl: String,\n clientId: String,\n validateBlueprintUrl: String,\n defaultConditionId: String\n }\n static targets = ['loading']\n\n\n connect() {\n // for select2 jquery events and datepicker\n this.element.refineStateController = this\n this.changeDelegate = delegate('change', ['event', 'picker'])\n this.blueprint = this.blueprintValue\n this.conditions = this.conditionsValue\n this.filterName = this.classNameValue\n this.conditionsLookup = this.conditions.reduce((lookup, condition) => {\n lookup[condition.id] = condition\n return lookup\n }, {})\n this.loadingTimeout = null\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n disconnect() {\n abnegate('change', this.changeDelegate)\n }\n\n startUpdate() {\n if (this.loadingTimeout) {\n window.clearTimeout(this.loadingTimeout)\n }\n // only show the loading overlay if it's taking a long time\n // to render the updates\n this.loadingTimeout = window.setTimeout(() => {\n this.loadingTarget.classList.remove('hidden')\n }, 1000)\n }\n\n finishUpdate() {\n if (this.loadingTimeout) {\n window.clearTimeout(this.loadingTimeout)\n }\n this.loadingTarget.classList.add('hidden')\n }\n\n conditionConfigFor(conditionId) {\n return this.conditionsLookup[conditionId]\n }\n\n addGroup() {\n const { blueprint, conditions } = this\n const condition = ( conditions.find(c => c.id == this.defaultConditionIdValue) || conditions[0] )\n const { meta } = condition\n\n if (this.blueprint.length > 0) {\n this.blueprint.push(or())\n }\n this.blueprint.push(criterion(condition.id, 1, condition))\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n addCriterion(previousCriterionId) {\n const { blueprint, conditions } = this\n const condition = ( conditions.find(c => c.id == this.defaultConditionIdValue) || conditions[0] )\n const { meta } = condition\n blueprint.splice(previousCriterionId + 1, 0, and(), criterion(condition.id, 1, condition))\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n deleteCriterion(criterionId) {\n /**\n To support 'groups' there is some complicated logic for deleting criterion.\n\n Imagine this simplified blueprint: [eq, and, sw, or, eq]\n\n User clicks to delete the last eq. We also have to delete the preceding or\n otherwise we're left with a hanging empty group\n\n What if the user deletes the sw? We have to clean up the preceding and.\n\n Imagine another scenario: [eq or sw and ew]\n Now we delete the first eq but this time we need to clean up the or.\n\n These conditionals cover these cases.\n **/\n const { blueprint } = this\n const previous = blueprint[criterionId - 1]\n const next = blueprint[criterionId + 1]\n\n const nextIsOr = next && next.word === 'or'\n const previousIsOr = previous && previous.word === 'or'\n\n const nextIsRightParen = nextIsOr || !next\n const previousIsLeftParen = previousIsOr || !previous\n\n const isFirstInGroup = previousIsLeftParen && !nextIsRightParen\n const isLastInGroup = previousIsLeftParen && nextIsRightParen\n const isLastCriterion = !previous && !next\n\n if (isLastCriterion) {\n this.blueprint = []\n } else if (isLastInGroup && previousIsOr) {\n blueprint.splice(criterionId - 1, 2)\n } else if (isLastInGroup && !previous) {\n blueprint.splice(criterionId, 2)\n } else if (isFirstInGroup) {\n blueprint.splice(criterionId, 2)\n } else {\n blueprint.splice(criterionId - 1, 2)\n }\n\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n /*\n Updates a criterion in the blueprint\n Returns true if an update was actually performed, or false if no-op\n */\n replaceCriterion(criterionId, conditionId, condition) {\n const criterionRow = this.blueprint[criterionId]\n if (criterionRow.type !== 'criterion') {\n throw new Error(\n `You can't call updateConditionId on a non-criterion type. Trying to update ${JSON.stringify(criterion)}`\n )\n }\n const existingCriterion = this.blueprint[criterionId]\n const newCriterion = criterion(conditionId, criterionRow.depth, condition)\n if (isEqual(existingCriterion, newCriterion)) {\n return false\n } else {\n this.blueprint[criterionId] = newCriterion\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n return true\n }\n }\n\n updateInput(criterionId, input, inputId) {\n // Input id is an array of hash keys that define the path for this input such as [\"input\", \"date_refinement\"]\n const { blueprint } = this\n const criterion = blueprint[criterionId]\n inputId = inputId || 'input'\n const blueprintPath = inputId.split(', ')\n // If the inputId contains more than one element, add input at appropriate depth\n if (blueprintPath.length > 1) {\n criterion[blueprintPath[0]][blueprintPath[1]] = { ...criterion[blueprintPath[0]][blueprintPath[1]], ...input }\n } else {\n criterion[inputId] = { ...criterion[inputId], ...input }\n }\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { filterStoredEvent } from '../../refine/helpers'\n\nexport default class extends Controller {\n static targets = ['blueprintField']\n static values = { formId: String, stateDomId: String }\n\n connect() {\n const stateController = document\n .getElementById(this.stateDomIdValue)\n .refineStateController\n this.blueprintFieldTarget.value = JSON.stringify(stateController.blueprint)\n console.log(\"connect\", this.blueprintFieldTarget.value)\n }\n\n updateBlueprintField(event) {\n if (event.detail.formId != this.formIdValue) { return null }\n const { detail } = event\n const { blueprint } = detail\n this.blueprintFieldTarget.value = JSON.stringify(blueprint)\n console.log(\"update blueprint\", this.blueprintFieldTarget.value)\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n submit(event) {\n event.preventDefault()\n this.element.submit()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// simple controller to hide/show the filter modal\nexport default class extends Controller {\n static targets = [\"content\"]\n\n toggle(_event) {\n this.contentTargets.forEach(node => {\n node.toggleAttribute(\"hidden\")\n })\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n/*\n attach to a form element to have it submit to a turbo-stream endpoint\n\n <form action=\"/contacts\" data-controller=\"refine--turbo-stream-form\" data-action=\"submit->refine--turbo-stream-form#submit\">\n\n Turbo is supposed to handle this natively but we're seeing issues when the form is inside an iframe\n*/\nexport default class extends Controller {\n async submit(event) {\n event.preventDefault()\n const request = new FetchRequest(\n (this.element.method || \"POST\"),\n this.element.action,\n {\n responseKind: \"turbo-stream\",\n body: new FormData(this.element)\n }\n )\n await request.perform()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n/*\n attach to a link element to have it request turbo stream responses\n\n <a href=\"/contacts\" data-controller=\"refine--turbo-stream-link\" data-action=\"refine--turbo-stream-link#get\">Click me</a>\n\n Turbo is supposed to handle this natively with data-turbo-stream but we're\n seeing issues using that attribute inside iframes\n*/\nexport default class extends Controller {\n async visit(event) {\n event.preventDefault()\n const request = new FetchRequest(\n (this.element.dataset.turboMethod || \"GET\"),\n this.element.href,\n {\n responseKind: \"turbo-stream\",\n }\n )\n await request.perform()\n }\n}\n","import ServerRefreshController from './server-refresh-controller'\nimport { debounce } from 'lodash'\n\nexport default class extends ServerRefreshController {\n static values = {\n criterionId: Number,\n }\n\n initialize() {\n this.updateBlueprint = debounce((event, value, inputKey) => {\n this.value(event, value, inputKey)\n }, 500)\n }\n\n refinedFilter(event) {\n const { criterionIdValue, state } = this\n const dataset = event.target.dataset\n const inputId = dataset.inputId\n\n state.updateInput(\n criterionIdValue,\n {\n id: event.target.value,\n },\n inputId\n )\n this.refreshFromServer()\n }\n\n clause(event) {\n const { criterionIdValue, state } = this\n const dataset = event.target.dataset\n const inputId = dataset.inputId\n state.updateInput(\n criterionIdValue,\n {\n clause: event.target.value,\n },\n inputId\n )\n this.refreshFromServer()\n }\n\n selected(event) {\n const { target: select } = event\n const options = Array.prototype.slice.call(select.options)\n const selectedOptions = options.filter((option) => option.selected)\n const selected = selectedOptions.map((option) => option.value)\n this.value(event, selected, 'selected')\n }\n\n value(event, value, inputKey) {\n const { criterionIdValue, state } = this\n const dataset = event.target.dataset\n const inputId = dataset.inputId\n inputKey = inputKey || dataset.inputKey || 'value'\n value = value || event.target.value\n state.updateInput(\n criterionIdValue,\n {\n [inputKey]: value,\n },\n inputId\n )\n }\n\n condition(event) {\n const { criterionIdValue, state } = this\n const element = event.target\n let newConditionId = element.value\n if (!newConditionId) newConditionId = element.querySelector('select').value \n const config = this.state.conditionConfigFor(newConditionId)\n const updatePerformed = state.replaceCriterion(criterionIdValue, newConditionId, config)\n if (updatePerformed) {\n this.refreshFromServer()\n }\n }\n\n // Prevent form submission when hitting enter in a text box\n cancelEnter(event) {\n if (event.code === \"Enter\") {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport moment from 'moment'\nrequire('daterangepicker/daterangepicker.css')\n\n// requires jQuery, moment, might want to consider a vanilla JS alternative\nimport $ from 'jquery' // ensure jquery is loaded before daterangepicker\nimport 'daterangepicker'\n\nexport default class extends Controller {\n static targets = [\n 'field',\n 'hiddenField',\n 'clearButton',\n ]\n\n static values = {\n includeTime: Boolean,\n futureOnly: Boolean,\n drops: String,\n inline: Boolean,\n dateFormat: String,\n timeFormat: String,\n isAmPm: Boolean,\n locale: { type: String, default: 'en' },\n datetimeFormat: { type: String, default: 'MM/DD/YYYY h:mm A' },\n pickerLocale: { type: Object, default: {} },\n }\n\n connect() {\n this.initPluginInstance()\n }\n\n disconnect() {\n this.teardownPluginInstance()\n }\n\n clearDate(event) {\n // don't submit the form, unless it originated from the cancel/clear button\n event.preventDefault()\n\n window.$(this.fieldTarget).val('')\n\n this.dispatch('value-cleared')\n }\n\n applyDateToField(event, picker) {\n const format = this.includeTimeValue ? this.timeFormatValue : this.dateFormatValue\n\n const momentVal = picker\n ? moment(picker.startDate.toISOString())\n : moment(this.fieldTarget.value, 'YYYY-MM-DDTHH:mm').format('YYYY-MM-DDTHH:mm')\n const displayVal = momentVal.format(format)\n const dataVal = this.includeTimeValue ? momentVal.toISOString(true) : momentVal.format('YYYY-MM-DD')\n\n this.fieldTarget.value = displayVal\n this.hiddenFieldTarget.value = dataVal\n // bubble up a change event when the input is updated for other listeners\n window.$(this.fieldTarget).trigger('change', picker)\n\n // emit native change event\n this.hiddenFieldTarget.dispatchEvent(new Event('change', { detail: picker, bubbles: true }))\n }\n\n initPluginInstance() {\n const localeValues = this.pickerLocaleValue\n const isAmPm = this.isAmPmValue\n localeValues['format'] = this.includeTimeValue ? this.timeFormatValue : this.dateFormatValue\n\n window.$(this.fieldTarget).daterangepicker({\n singleDatePicker: true,\n timePicker: this.includeTimeValue,\n timePickerIncrement: 5,\n autoUpdateInput: false,\n autoApply: true,\n minDate: this.futureOnlyValue ? new Date() : false,\n locale: localeValues,\n parentEl: $(this.element),\n drops: this.dropsValue ? this.dropsValue : 'down',\n timePicker24Hour: !isAmPm,\n })\n\n window.$(this.fieldTarget).on('apply.daterangepicker', this.applyDateToField.bind(this))\n window.$(this.fieldTarget).on('cancel.daterangepicker', this.clearDate.bind(this))\n window.$(this.fieldTarget).on('showCalendar.daterangepicker', this.showCalendar.bind(this))\n\n this.pluginMainEl = this.fieldTarget\n this.plugin = $(this.pluginMainEl).data('daterangepicker') // weird\n\n if (this.inlineValue) {\n this.element.classList.add('date-input--inline')\n }\n\n }\n \n teardownPluginInstance() {\n if (this.plugin === undefined) {\n return\n }\n\n $(this.pluginMainEl).off('apply.daterangepicker')\n $(this.pluginMainEl).off('cancel.daterangepicker')\n $(this.pluginMainEl).off('showCalendar.daterangepicker')\n\n // revert to original markup, remove any event listeners\n this.plugin.remove()\n\n }\n\n showCalendar() {\n this.dispatch('show-calendar')\n }\n\n}\n","import { identifierForContextKey } from \"@hotwired/stimulus-webpack-helpers\"\n\nimport AddController from './refine/add-controller'\nimport InlineConditionsController from './refine/inline-conditions-controller'\nimport CriterionFormController from './refine/criterion-form-controller'\nimport DefaultsController from './refine/defaults-controller'\nimport DeleteController from './refine/delete-controller'\nimport FilterPillsController from './refine/filter-pills-controller'\nimport PopupController from './refine/popup-controller'\nimport SearchFilterController from './refine/search-filter-controller'\nimport ServerRefreshController from './refine/server-refresh-controller'\nimport StateController from './refine/state-controller'\nimport StoredFilterController from './refine/stored-filter-controller'\nimport SubmitForm from './refine/submit-form-controller'\nimport ToggleController from './refine/toggle-controller'\nimport TurboStreamFormController from './refine/turbo-stream-form-controller'\nimport TurboStreamLinkController from './refine/turbo-stream-link-controller'\nimport UpdateController from './refine/update-controller'\nimport DateController from './refine/date-controller'\n\nexport const controllerDefinitions = [\n [AddController, 'refine/add-controller.js'],\n [InlineConditionsController, './refine/inline-conditions-controller.js'],\n [CriterionFormController, 'refine/criterion-form-controller.js'],\n [DefaultsController, 'refine/defaults-controller.js'],\n [DeleteController, 'refine/delete-controller.js'],\n [FilterPillsController, 'refine/filter-pills-controller.js'],\n [PopupController, 'refine/popup-controller.js'],\n [SearchFilterController, 'refine/search-filter-controller.js'],\n [ServerRefreshController, 'refine/server-refresh-controller.js'],\n [StateController, 'refine/state-controller.js'],\n [StoredFilterController, 'refine/stored-filter-controller.js'],\n [SubmitForm, 'refine/submit-form-controller.js'],\n [ToggleController, 'refine/toggle-controller.js'],\n [TurboStreamFormController, 'refine/turbo-stream-form-controller.js'],\n [TurboStreamLinkController, 'refine/turbo-stream-link-controller.js'],\n [UpdateController, 'refine/update-controller.js'],\n [DateController, 'refine/date-controller.js']\n].map(function(d) {\n const key = d[1]\n const controller = d[0]\n return {\n identifier: identifierForContextKey(key),\n controllerConstructor: controller\n }\n})\n\nexport {\n AddController,\n InlineConditionsController,\n CriterionFormController,\n DefaultsController,\n DeleteController,\n FilterPillsController,\n PopupController,\n SearchFilterController,\n ServerRefreshController,\n StateController,\n StoredFilterController,\n SubmitForm,\n ToggleController,\n TurboStreamFormController,\n TurboStreamLinkController,\n UpdateController,\n DateController\n}\n"],"names":["identifierForContextKey","key","logicalName","match","replace","Controller","connect","this","state","finishUpdate","currentElement","element","document","body","matches","application","getControllerForElementAndIdentifier","parentNode","refreshFromServer","options","_this","includeErrors","startUpdate","request","FetchRequest","refreshUrlValue","responseKind","query","filterName","JSON","stringify","blueprint","clientIdValue","include_errors","perform","then","e","Promise","reject","ServerRefreshController","criterion","resolve","validateBlueprint","isValid","addCriterion","previousCriterionIdValue","group","_this2","addGroup","_this3","validateBlueprintUrlValue","response","ok","values","previousCriterionId","Number","filterConditions","event","currentTarget","value","toLowerCase","visibleCategories","Set","conditionTargets","forEach","conditionNode","innerHTML","includes","hidden","add","dataset","category","categoryTargets","categoryNode","has","targets","_class","refresh","_event","formData","FormData","url","URL","urlValue","name","entries","console","log","searchParams","set","window","Turbo","visit","toString","frame","turboFrameValue","String","turboFrame","method","type","default","getStateController","updateInput","criterionIdValue","inputValue","controller","criterionId","input","Object","deleteCriterion","urlParams","URLSearchParams","location","search","existingParams","delete","index","parseInt","stateController","reloadPage","submitUrlValue","refine_filters_builder","filter_class","blueprint_json","client_id","redirectToStableId","stableId","params","append","allParams","fromEntries","pathname","history","pushState","title","reload","refineStateController","stabilizeFilterController","submitUrl","useClickOutside","boundHandleKeyUp","handleKeyUp","bind","addEventListener","disconnect","removeEventListener","show","preventDefault","frameTarget","src","srcValue","isOpenValue","hide","clickOutside","isOpen","Boolean","submitFilter","activeElement","blur","querySelector","loadResults","_ref","detail","href","CustomEvent","bubbles","cancelable","undefined","evt","createEvent","initCustomEvent","prototype","Event","blueprintUpdatedEvent","formId","_ref2","dispatchEvent","id","depth","condition","_clauses$","component","meta","clauses","refinements","selected","newInput","clause","refinement","condition_id","changeDelegate","delegate","blueprintValue","conditions","conditionsValue","classNameValue","conditionsLookup","reduce","lookup","loadingTimeout","formIdValue","abnegate","clearTimeout","setTimeout","loadingTarget","classList","remove","conditionConfigFor","conditionId","find","c","defaultConditionIdValue","length","push","word","splice","previous","next","previousIsOr","nextIsRightParen","previousIsLeftParen","isLastInGroup","replaceCriterion","criterionRow","Error","existingCriterion","newCriterion","isEqual","inputId","blueprintPath","split","Array","className","refreshUrl","clientId","validateBlueprintUrl","defaultConditionId","getElementById","stateDomIdValue","blueprintFieldTarget","updateBlueprintField","stateDomId","submit","toggle","contentTargets","node","toggleAttribute","TurboStreamFormController","action","turboMethod","initialize","updateBlueprint","debounce","inputKey","refinedFilter","target","select","slice","call","filter","option","map","newConditionId","config","cancelEnter","code","stopPropagation","require","initPluginInstance","teardownPluginInstance","clearDate","$","fieldTarget","val","dispatch","applyDateToField","picker","format","includeTimeValue","timeFormatValue","dateFormatValue","momentVal","moment","startDate","toISOString","displayVal","dataVal","hiddenFieldTarget","trigger","localeValues","pickerLocaleValue","isAmPm","isAmPmValue","daterangepicker","singleDatePicker","timePicker","timePickerIncrement","autoUpdateInput","autoApply","minDate","futureOnlyValue","Date","locale","parentEl","drops","dropsValue","timePicker24Hour","on","showCalendar","pluginMainEl","plugin","data","inlineValue","off","includeTime","futureOnly","inline","dateFormat","timeFormat","datetimeFormat","pickerLocale","controllerDefinitions","AddController","InlineConditionsController","CriterionFormController","DefaultsController","DeleteController","FilterPillsController","PopupController","SearchFilterController","StateController","StoredFilterController","SubmitForm","ToggleController","TurboStreamLinkController","UpdateController","DateController","d","identifier","controllerConstructor"],"mappings":"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"}
1
+ {"version":3,"file":"refine-stimulus.js","sources":["../../../node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","../../javascript/controllers/refine/server-refresh-controller.js","../../javascript/controllers/refine/add-controller.js","../../javascript/controllers/refine/criterion-form-controller.js","../../javascript/controllers/refine/defaults-controller.js","../../javascript/controllers/refine/delete-controller.js","../../javascript/controllers/refine/filter-pills-controller.js","../../javascript/controllers/refine/popup-controller.js","../../javascript/controllers/refine/search-filter-controller.js","../../javascript/refine/helpers/index.js","../../javascript/controllers/refine/state-controller.js","../../javascript/controllers/refine/stored-filter-controller.js","../../javascript/controllers/refine/submit-form-controller.js","../../javascript/controllers/refine/toggle-controller.js","../../javascript/controllers/refine/turbo-stream-form-controller.js","../../javascript/controllers/refine/turbo-stream-link-controller.js","../../javascript/controllers/refine/typeahead-list-controller.js","../../javascript/controllers/refine/update-controller.js","../../javascript/controllers/refine/date-controller.js","../../javascript/controllers/index.js"],"sourcesContent":["/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n\n// Base class for controllers that reload form content from the server\nexport default class extends Controller {\n connect() {\n this.state.finishUpdate()\n }\n\n get state() {\n let currentElement = this.element\n\n while(currentElement !== document.body) {\n if (currentElement.matches('[data-controller~=\"refine--state\"]'))\n return this.application.getControllerForElementAndIdentifier(currentElement, 'refine--state')\n else {\n currentElement = currentElement.parentNode\n }\n }\n\n return null\n }\n\n async refreshFromServer(options = {}) {\n const { includeErrors } = options\n this.state.startUpdate()\n const request = new FetchRequest(\n \"GET\",\n this.state.refreshUrlValue,\n {\n responseKind: \"turbo-stream\",\n query: {\n \"refine_filters_builder[filter_class]\": this.state.filterName,\n \"refine_filters_builder[blueprint_json]\": JSON.stringify(this.state.blueprint),\n \"refine_filters_builder[client_id]\": this.state.clientIdValue,\n include_errors: !!includeErrors\n }\n }\n )\n await request.perform()\n }\n}\n","import ServerRefreshController from './server-refresh-controller'\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends ServerRefreshController {\n static values = {\n previousCriterionId: Number,\n }\n\n async criterion() {\n const isValid = await this.validateBlueprint()\n if (isValid) {\n this.state.addCriterion(this.previousCriterionIdValue)\n }\n this.refreshFromServer({includeErrors: !isValid})\n }\n\n async group() {\n const isValid = await this.validateBlueprint()\n if (isValid) {\n this.state.addGroup()\n }\n this.refreshFromServer({includeErrors: !isValid})\n }\n\n async validateBlueprint(blueprint) {\n const { state } = this\n\n const request = new FetchRequest(\n \"GET\",\n this.state.validateBlueprintUrlValue,\n {\n query: {\n \"refine_filters_builder[filter_class]\": this.state.filterName,\n \"refine_filters_builder[blueprint_json]\": JSON.stringify(this.state.blueprint),\n \"refine_filters_builder[client_id]\": this.state.clientIdValue\n }\n }\n )\n const response = await request.perform()\n return response.ok\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n/*\n This controller handles criteria forms\n (refine/inline/criteria/new|edit)\n*/\nexport default class extends Controller {\n static values = {\n url: String,\n formId: String\n }\n\n async refresh(_event) {\n // update the url with params from the form\n const formElement = document.getElementById(this.formIdValue)\n const formData = new FormData(formElement)\n\n const request = new FetchRequest(\n \"GET\",\n this.urlValue,\n {\n query: formData,\n responseKind: \"turbo-stream\"\n }\n )\n const response = await request.perform()\n }\n\n\n\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = {\n criterionId: Number,\n input: Object,\n };\n\n connect() {\n this.state = this.getStateController()\n\n this.state.updateInput(\n this.criterionIdValue,\n this.inputValue,\n );\n }\n\n getStateController() {\n let currentElement = this.element\n\n while(currentElement !== document.body) {\n const controller = this.application.getControllerForElementAndIdentifier(currentElement, 'refine--state')\n if (controller) {\n return controller\n } else {\n currentElement = currentElement.parentNode\n }\n }\n\n return null\n }\n}\n","import ServerRefreshController from './server-refresh-controller';\n\nexport default class extends ServerRefreshController {\n static values = {\n criterionId: Number,\n }\n\n criterion() {\n const { state, criterionIdValue } = this;\n state.deleteCriterion(criterionIdValue);\n this.refreshFromServer()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends Controller {\n static values = {\n submitUrl: String\n }\n\n connect() {\n const urlParams = new URLSearchParams(window.location.search)\n this.existingParams = urlParams\n this.existingParams.delete('stable_id')\n }\n\n delete(event) {\n const { criterionId } = event.currentTarget.dataset\n var index = parseInt(criterionId)\n this.stateController.deleteCriterion(index)\n this.reloadPage()\n }\n\n async reloadPage() {\n const {blueprint} = this.stateController\n const request = new FetchRequest(\n \"POST\",\n this.submitUrlValue,\n {\n responseKind: \"turbo-stream\",\n body: JSON.stringify({\n refine_filters_builder: {\n filter_class: this.stateController.filterName,\n blueprint_json: JSON.stringify(blueprint),\n client_id: this.stateController.clientIdValue\n }\n })\n }\n )\n await request.perform()\n }\n\n redirectToStableId(stableId) {\n const params = new URLSearchParams()\n if (stableId) {\n params.append('stable_id', stableId)\n }\n const allParams = new URLSearchParams({\n ...Object.fromEntries(this.existingParams),\n ...Object.fromEntries(params),\n }).toString()\n const url = `${window.location.pathname}?${allParams}`\n\n history.pushState({}, document.title, url)\n window.location.reload()\n }\n\n get stateController() {\n return this.element.refineStateController\n }\n\n get stabilizeFilterController() {\n return this.element.stabilizeFilterController\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { useClickOutside } from 'stimulus-use'\n\n// simple controller to hide/show the filter modal\nexport default class extends Controller {\n static targets = [\"frame\"]\n\n static values = {\n src: String,\n isOpen: {type: Boolean, default: false}\n }\n\n connect() {\n useClickOutside(this)\n this.boundHandleKeyUp = this.handleKeyUp.bind(this)\n document.addEventListener(\"keyup\", this.boundHandleKeyUp)\n }\n\n disconnect() {\n document.removeEventListener(\"keyup\", this.boundHandleKeyUp)\n }\n\n show(event) {\n event.preventDefault()\n this.frameTarget.src = this.srcValue;\n this.isOpenValue = true\n }\n\n hide(event) {\n if (this.isOpenValue) {\n event?.preventDefault()\n this.frameTarget.innerHTML = \"\";\n this.isOpenValue = false\n }\n }\n\n clickOutside(event) {\n this.hide(event)\n }\n\n handleKeyUp(event) {\n if (event.key === \"Escape\" || event.key === \"Esc\") {\n this.hide(event)\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends Controller {\n static values = {\n submitUrl: String\n }\n\n\n search(event) {\n event.preventDefault()\n this.submitFilter()\n document.activeElement.blur()\n }\n\n async submitFilter() {\n const {blueprint} = this.stateController\n const request = new FetchRequest(\n \"POST\",\n this.submitUrlValue,\n {\n responseKind: \"turbo-stream\",\n body: JSON.stringify({\n refine_filters_builder: {\n filter_class: this.stateController.filterName,\n blueprint_json: JSON.stringify(blueprint),\n client_id: this.stateController.clientIdValue\n }\n })\n }\n )\n await request.perform()\n }\n\n get stateController() {\n return this\n .element\n .querySelector('[data-controller~=\"refine--state\"]')\n .refineStateController\n }\n\n loadResults({detail: {url}}) {\n console.log(\"filter submit success\")\n if (window.Turbo) {\n window.Turbo.visit(url)\n } else {\n window.location.href = url\n }\n }\n}\n","// Polyfill for custom events in IE9-11\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#polyfill\n;(function () {\n if (typeof window.CustomEvent === 'function') return false\n\n function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined }\n var evt = document.createEvent('CustomEvent')\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail)\n return evt\n }\n\n CustomEvent.prototype = window.Event.prototype\n\n window.CustomEvent = CustomEvent\n\n // eslint expects a return here\n return true\n})()\n\nexport const filterStabilizedEvent = (element, stableId, filterName) => {\n const event = new CustomEvent('filter-stabilized', {\n bubbles: true,\n cancelable: true,\n detail: {\n stableId,\n filterName,\n },\n })\n element.dispatchEvent(event)\n}\n\nexport const filterUnstableEvent = (blueprint) => {\n const event = new CustomEvent('filter-unstable', {\n bubbles: true,\n cancelable: true,\n detail: {\n blueprint,\n },\n })\n window.dispatchEvent(event)\n}\n\nexport const filterInvalidEvent = ({blueprint, errors}) => {\n const event = new CustomEvent('filter-invalid', {\n bubbles: true,\n cancelable: true,\n detail: {\n blueprint,\n errors,\n },\n })\n window.dispatchEvent(event)\n}\n\nexport const filterStoredEvent = (storedFilterId) => {\n const event = new CustomEvent('filter-stored', {\n bubbles: true,\n cancelable: true,\n detail: {\n storedFilterId,\n },\n })\n window.dispatchEvent(event)\n}\n\nexport const blueprintUpdatedEvent = (element, {blueprint, formId}) => {\n const event = new CustomEvent('blueprint-updated', {\n bubbles: true,\n cancelable: true,\n detail: {\n blueprint,\n formId\n },\n })\n element.dispatchEvent(event)\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { delegate, abnegate } from 'jquery-events-to-dom-events'\nimport { blueprintUpdatedEvent } from '../../refine/helpers'\nimport { isEqual } from 'lodash'\n\nconst criterion = (id, depth, condition) => {\n const component = condition?.component\n const meta = condition?.meta || { clauses: [], options: {}}\n const refinements = condition?.refinements || []\n const { clauses, options } = meta\n let selected\n if (component === 'option-condition') {\n selected = options[0] ? [options[0].id] : []\n } else {\n selected = undefined\n }\n // Set newInput based on component\n\n let newInput = {\n clause: clauses[0]?.id,\n selected: selected,\n }\n\n // If refinements are present, add to input array\n refinements.forEach((refinement) => {\n const { meta, component } = refinement\n const { clauses, options } = meta\n let selected\n if (component === 'option-condition') {\n selected = options[0] ? [options[0].id] : []\n } else {\n selected = undefined\n }\n newInput[refinement.id] = {\n clause: clauses[0].id,\n selected: selected,\n }\n })\n\n return {\n depth,\n type: 'criterion',\n condition_id: id,\n input: newInput,\n }\n}\n\nconst or = function (depth) {\n depth = depth === undefined ? 0 : depth\n return {\n depth,\n type: 'conjunction',\n word: 'or',\n }\n}\n\nconst and = function (depth) {\n depth = depth === undefined ? 1 : depth\n return {\n depth,\n type: 'conjunction',\n word: 'and',\n }\n}\nexport default class extends Controller {\n static values = {\n blueprint: Array,\n conditions: Array,\n className: String,\n refreshUrl: String,\n clientId: String,\n validateBlueprintUrl: String,\n defaultConditionId: String\n }\n static targets = ['loading']\n\n\n connect() {\n // for select2 jquery events and datepicker\n this.element.refineStateController = this\n this.changeDelegate = delegate('change', ['event', 'picker'])\n this.blueprint = this.blueprintValue\n this.conditions = this.conditionsValue\n this.filterName = this.classNameValue\n this.conditionsLookup = this.conditions.reduce((lookup, condition) => {\n lookup[condition.id] = condition\n return lookup\n }, {})\n this.loadingTimeout = null\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n disconnect() {\n abnegate('change', this.changeDelegate)\n }\n\n startUpdate() {\n if (this.loadingTimeout) {\n window.clearTimeout(this.loadingTimeout)\n }\n // only show the loading overlay if it's taking a long time\n // to render the updates\n this.loadingTimeout = window.setTimeout(() => {\n this.loadingTarget.classList.remove('hidden')\n }, 1000)\n }\n\n finishUpdate() {\n if (this.loadingTimeout) {\n window.clearTimeout(this.loadingTimeout)\n }\n this.loadingTarget.classList.add('hidden')\n }\n\n conditionConfigFor(conditionId) {\n return this.conditionsLookup[conditionId]\n }\n\n addGroup() {\n const { blueprint, conditions } = this\n const condition = ( conditions.find(c => c.id == this.defaultConditionIdValue) || conditions[0] )\n const { meta } = condition\n\n if (this.blueprint.length > 0) {\n this.blueprint.push(or())\n }\n this.blueprint.push(criterion(condition.id, 1, condition))\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n addCriterion(previousCriterionId) {\n const { blueprint, conditions } = this\n const condition = ( conditions.find(c => c.id == this.defaultConditionIdValue) || conditions[0] )\n const { meta } = condition\n blueprint.splice(previousCriterionId + 1, 0, and(), criterion(condition.id, 1, condition))\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n deleteCriterion(criterionId) {\n /**\n To support 'groups' there is some complicated logic for deleting criterion.\n\n Imagine this simplified blueprint: [eq, and, sw, or, eq]\n\n User clicks to delete the last eq. We also have to delete the preceding or\n otherwise we're left with a hanging empty group\n\n What if the user deletes the sw? We have to clean up the preceding and.\n\n Imagine another scenario: [eq or sw and ew]\n Now we delete the first eq but this time we need to clean up the or.\n\n These conditionals cover these cases.\n **/\n const { blueprint } = this\n const previous = blueprint[criterionId - 1]\n const next = blueprint[criterionId + 1]\n\n const nextIsOr = next && next.word === 'or'\n const previousIsOr = previous && previous.word === 'or'\n\n const nextIsRightParen = nextIsOr || !next\n const previousIsLeftParen = previousIsOr || !previous\n\n const isFirstInGroup = previousIsLeftParen && !nextIsRightParen\n const isLastInGroup = previousIsLeftParen && nextIsRightParen\n const isLastCriterion = !previous && !next\n\n if (isLastCriterion) {\n this.blueprint = []\n } else if (isLastInGroup && previousIsOr) {\n blueprint.splice(criterionId - 1, 2)\n } else if (isLastInGroup && !previous) {\n blueprint.splice(criterionId, 2)\n } else if (isFirstInGroup) {\n blueprint.splice(criterionId, 2)\n } else {\n blueprint.splice(criterionId - 1, 2)\n }\n\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n /*\n Updates a criterion in the blueprint\n Returns true if an update was actually performed, or false if no-op\n */\n replaceCriterion(criterionId, conditionId, condition) {\n const criterionRow = this.blueprint[criterionId]\n if (criterionRow.type !== 'criterion') {\n throw new Error(\n `You can't call updateConditionId on a non-criterion type. Trying to update ${JSON.stringify(criterion)}`\n )\n }\n const existingCriterion = this.blueprint[criterionId]\n const newCriterion = criterion(conditionId, criterionRow.depth, condition)\n if (isEqual(existingCriterion, newCriterion)) {\n return false\n } else {\n this.blueprint[criterionId] = newCriterion\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n return true\n }\n }\n\n updateInput(criterionId, input, inputId) {\n // Input id is an array of hash keys that define the path for this input such as [\"input\", \"date_refinement\"]\n const { blueprint } = this\n const criterion = blueprint[criterionId]\n inputId = inputId || 'input'\n const blueprintPath = inputId.split(', ')\n // If the inputId contains more than one element, add input at appropriate depth\n if (blueprintPath.length > 1) {\n criterion[blueprintPath[0]][blueprintPath[1]] = { ...criterion[blueprintPath[0]][blueprintPath[1]], ...input }\n } else {\n criterion[inputId] = { ...criterion[inputId], ...input }\n }\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { filterStoredEvent } from '../../refine/helpers'\n\nexport default class extends Controller {\n static targets = ['blueprintField']\n static values = { formId: String, stateDomId: String }\n\n connect() {\n const stateController = document\n .getElementById(this.stateDomIdValue)\n .refineStateController\n this.blueprintFieldTarget.value = JSON.stringify(stateController.blueprint)\n console.log(\"connect\", this.blueprintFieldTarget.value)\n }\n\n updateBlueprintField(event) {\n if (event.detail.formId != this.formIdValue) { return null }\n const { detail } = event\n const { blueprint } = detail\n this.blueprintFieldTarget.value = JSON.stringify(blueprint)\n console.log(\"update blueprint\", this.blueprintFieldTarget.value)\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n submit(event) {\n event.preventDefault()\n this.element.submit()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// simple controller to hide/show the filter modal\nexport default class extends Controller {\n static targets = [\"content\"]\n\n toggle(_event) {\n this.contentTargets.forEach(node => {\n node.toggleAttribute(\"hidden\")\n })\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n/*\n attach to a form element to have it submit to a turbo-stream endpoint\n\n <form action=\"/contacts\" data-controller=\"refine--turbo-stream-form\" data-action=\"submit->refine--turbo-stream-form#submit\">\n\n Turbo is supposed to handle this natively but we're seeing issues when the form is inside an iframe\n*/\nexport default class extends Controller {\n async submit(event) {\n event.preventDefault()\n const request = new FetchRequest(\n (this.element.method || \"POST\"),\n this.element.action,\n {\n responseKind: \"turbo-stream\",\n body: new FormData(this.element)\n }\n )\n await request.perform()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n/*\n attach to a link element to have it request turbo stream responses\n\n <a href=\"/contacts\" data-controller=\"refine--turbo-stream-link\" data-action=\"refine--turbo-stream-link#get\">Click me</a>\n\n Turbo is supposed to handle this natively with data-turbo-stream but we're\n seeing issues using that attribute inside iframes\n*/\nexport default class extends Controller {\n async visit(event) {\n event.preventDefault()\n const request = new FetchRequest(\n (this.element.dataset.turboMethod || \"GET\"),\n this.element.href,\n {\n responseKind: \"turbo-stream\",\n }\n )\n await request.perform()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n\n static targets = ['listItem', 'category']\n\n filter(event) {\n const query = event.currentTarget.value.toLowerCase()\n const visibleCategories = new Set()\n\n // hide / show listItem links that match the query and note which\n // categories should be visible\n this.listItemTargets.forEach(listItemNode => {\n const listItemName = listItemNode.dataset.listItemValue.toLowerCase()\n if (listItemName.includes(query)) {\n listItemNode.hidden = false\n visibleCategories.add(listItemNode.dataset.category)\n } else {\n listItemNode.hidden = true\n }\n })\n\n // hide / show category headers that have\n this.categoryTargets.forEach(categoryNode => {\n const categoryName = categoryNode.innerHTML\n if (visibleCategories.has(categoryName)) {\n categoryNode.hidden = false\n } else {\n categoryNode.hidden = true\n }\n })\n }\n}\n","import ServerRefreshController from './server-refresh-controller'\nimport { debounce } from 'lodash'\n\nexport default class extends ServerRefreshController {\n static values = {\n criterionId: Number,\n }\n\n initialize() {\n this.updateBlueprint = debounce((event, value, inputKey) => {\n this.value(event, value, inputKey)\n }, 500)\n }\n\n refinedFilter(event) {\n const { criterionIdValue, state } = this\n const dataset = event.target.dataset\n const inputId = dataset.inputId\n\n state.updateInput(\n criterionIdValue,\n {\n id: event.target.value,\n },\n inputId\n )\n this.refreshFromServer()\n }\n\n clause(event) {\n const { criterionIdValue, state } = this\n const dataset = event.target.dataset\n const inputId = dataset.inputId\n state.updateInput(\n criterionIdValue,\n {\n clause: event.target.value,\n },\n inputId\n )\n this.refreshFromServer()\n }\n\n selected(event) {\n const { target: select } = event\n const options = Array.prototype.slice.call(select.options)\n const selectedOptions = options.filter((option) => option.selected)\n const selected = selectedOptions.map((option) => option.value)\n this.value(event, selected, 'selected')\n }\n\n value(event, value, inputKey) {\n const { criterionIdValue, state } = this\n const dataset = event.target.dataset\n const inputId = dataset.inputId\n inputKey = inputKey || dataset.inputKey || 'value'\n value = value || event.target.value\n state.updateInput(\n criterionIdValue,\n {\n [inputKey]: value,\n },\n inputId\n )\n }\n\n condition(event) {\n const { criterionIdValue, state } = this\n const element = event.target\n let newConditionId = element.value\n if (!newConditionId) newConditionId = element.querySelector('select').value \n const config = this.state.conditionConfigFor(newConditionId)\n const updatePerformed = state.replaceCriterion(criterionIdValue, newConditionId, config)\n if (updatePerformed) {\n this.refreshFromServer()\n }\n }\n\n // Prevent form submission when hitting enter in a text box\n cancelEnter(event) {\n if (event.code === \"Enter\") {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport moment from 'moment'\nrequire('daterangepicker/daterangepicker.css')\n\n// requires jQuery, moment, might want to consider a vanilla JS alternative\nimport $ from 'jquery' // ensure jquery is loaded before daterangepicker\nimport 'daterangepicker'\n\nexport default class extends Controller {\n static targets = [\n 'field',\n 'hiddenField',\n 'clearButton',\n ]\n\n static values = {\n includeTime: Boolean,\n futureOnly: Boolean,\n drops: String,\n inline: Boolean,\n dateFormat: String,\n timeFormat: String,\n isAmPm: Boolean,\n locale: { type: String, default: 'en' },\n datetimeFormat: { type: String, default: 'MM/DD/YYYY h:mm A' },\n pickerLocale: { type: Object, default: {} },\n }\n\n connect() {\n this.initPluginInstance()\n }\n\n disconnect() {\n this.teardownPluginInstance()\n }\n\n clearDate(event) {\n // don't submit the form, unless it originated from the cancel/clear button\n event.preventDefault()\n\n window.$(this.fieldTarget).val('')\n\n this.dispatch('value-cleared')\n }\n\n applyDateToField(event, picker) {\n const format = this.includeTimeValue ? this.timeFormatValue : this.dateFormatValue\n\n const momentVal = picker\n ? moment(picker.startDate.toISOString())\n : moment(this.fieldTarget.value, 'YYYY-MM-DDTHH:mm').format('YYYY-MM-DDTHH:mm')\n const displayVal = momentVal.format(format)\n const dataVal = this.includeTimeValue ? momentVal.toISOString(true) : momentVal.format('YYYY-MM-DD')\n\n this.fieldTarget.value = displayVal\n this.hiddenFieldTarget.value = dataVal\n // bubble up a change event when the input is updated for other listeners\n window.$(this.fieldTarget).trigger('change', picker)\n\n // emit native change event\n this.hiddenFieldTarget.dispatchEvent(new Event('change', { detail: picker, bubbles: true }))\n }\n\n initPluginInstance() {\n const localeValues = this.pickerLocaleValue\n const isAmPm = this.isAmPmValue\n localeValues['format'] = this.includeTimeValue ? this.timeFormatValue : this.dateFormatValue\n\n window.$(this.fieldTarget).daterangepicker({\n singleDatePicker: true,\n timePicker: this.includeTimeValue,\n timePickerIncrement: 5,\n autoUpdateInput: false,\n autoApply: true,\n minDate: this.futureOnlyValue ? new Date() : false,\n locale: localeValues,\n parentEl: $(this.element),\n drops: this.dropsValue ? this.dropsValue : 'down',\n timePicker24Hour: !isAmPm,\n })\n\n window.$(this.fieldTarget).on('apply.daterangepicker', this.applyDateToField.bind(this))\n window.$(this.fieldTarget).on('cancel.daterangepicker', this.clearDate.bind(this))\n window.$(this.fieldTarget).on('showCalendar.daterangepicker', this.showCalendar.bind(this))\n\n this.pluginMainEl = this.fieldTarget\n this.plugin = $(this.pluginMainEl).data('daterangepicker') // weird\n\n if (this.inlineValue) {\n this.element.classList.add('date-input--inline')\n }\n\n }\n \n teardownPluginInstance() {\n if (this.plugin === undefined) {\n return\n }\n\n $(this.pluginMainEl).off('apply.daterangepicker')\n $(this.pluginMainEl).off('cancel.daterangepicker')\n $(this.pluginMainEl).off('showCalendar.daterangepicker')\n\n // revert to original markup, remove any event listeners\n this.plugin.remove()\n\n }\n\n showCalendar() {\n this.dispatch('show-calendar')\n }\n\n}\n","import { identifierForContextKey } from \"@hotwired/stimulus-webpack-helpers\"\n\nimport AddController from './refine/add-controller'\nimport CriterionFormController from './refine/criterion-form-controller'\nimport DefaultsController from './refine/defaults-controller'\nimport DeleteController from './refine/delete-controller'\nimport FilterPillsController from './refine/filter-pills-controller'\nimport PopupController from './refine/popup-controller'\nimport SearchFilterController from './refine/search-filter-controller'\nimport ServerRefreshController from './refine/server-refresh-controller'\nimport StateController from './refine/state-controller'\nimport StoredFilterController from './refine/stored-filter-controller'\nimport SubmitForm from './refine/submit-form-controller'\nimport ToggleController from './refine/toggle-controller'\nimport TurboStreamFormController from './refine/turbo-stream-form-controller'\nimport TurboStreamLinkController from './refine/turbo-stream-link-controller'\nimport TypeaheadListController from './refine/typeahead-list-controller'\nimport UpdateController from './refine/update-controller'\nimport DateController from './refine/date-controller'\n\nexport const controllerDefinitions = [\n [AddController, 'refine/add-controller.js'],\n [CriterionFormController, 'refine/criterion-form-controller.js'],\n [DefaultsController, 'refine/defaults-controller.js'],\n [DeleteController, 'refine/delete-controller.js'],\n [FilterPillsController, 'refine/filter-pills-controller.js'],\n [PopupController, 'refine/popup-controller.js'],\n [SearchFilterController, 'refine/search-filter-controller.js'],\n [ServerRefreshController, 'refine/server-refresh-controller.js'],\n [StateController, 'refine/state-controller.js'],\n [StoredFilterController, 'refine/stored-filter-controller.js'],\n [SubmitForm, 'refine/submit-form-controller.js'],\n [ToggleController, 'refine/toggle-controller.js'],\n [TurboStreamFormController, 'refine/turbo-stream-form-controller.js'],\n [TurboStreamLinkController, 'refine/turbo-stream-link-controller.js'],\n [TypeaheadListController, './refine/typeahead-list-controller.js'],\n [UpdateController, 'refine/update-controller.js'],\n [DateController, 'refine/date-controller.js']\n].map(function(d) {\n const key = d[1]\n const controller = d[0]\n return {\n identifier: identifierForContextKey(key),\n controllerConstructor: controller\n }\n})\n\nexport {\n AddController,\n CriterionFormController,\n DefaultsController,\n DeleteController,\n FilterPillsController,\n PopupController,\n SearchFilterController,\n ServerRefreshController,\n StateController,\n StoredFilterController,\n SubmitForm,\n ToggleController,\n TurboStreamFormController,\n TurboStreamLinkController,\n TypeaheadListController,\n UpdateController,\n DateController\n}\n"],"names":["identifierForContextKey","key","logicalName","match","replace","Controller","connect","this","state","finishUpdate","currentElement","element","document","body","matches","application","getControllerForElementAndIdentifier","parentNode","refreshFromServer","options","_this","includeErrors","startUpdate","request","FetchRequest","refreshUrlValue","responseKind","query","filterName","JSON","stringify","blueprint","clientIdValue","include_errors","perform","then","e","Promise","reject","ServerRefreshController","criterion","resolve","validateBlueprint","isValid","addCriterion","previousCriterionIdValue","group","_this2","addGroup","_this3","validateBlueprintUrlValue","response","ok","values","previousCriterionId","Number","refresh","_event","formElement","getElementById","formIdValue","formData","FormData","urlValue","url","String","formId","getStateController","updateInput","criterionIdValue","inputValue","controller","criterionId","input","Object","deleteCriterion","urlParams","URLSearchParams","window","location","search","existingParams","delete","event","currentTarget","dataset","index","parseInt","stateController","reloadPage","submitUrlValue","refine_filters_builder","filter_class","blueprint_json","client_id","redirectToStableId","stableId","params","append","allParams","fromEntries","toString","pathname","history","pushState","title","reload","refineStateController","stabilizeFilterController","submitUrl","useClickOutside","boundHandleKeyUp","handleKeyUp","bind","addEventListener","disconnect","removeEventListener","show","preventDefault","frameTarget","src","srcValue","isOpenValue","hide","innerHTML","clickOutside","targets","isOpen","type","Boolean","default","_class","submitFilter","activeElement","blur","querySelector","loadResults","_ref","detail","console","log","Turbo","visit","href","CustomEvent","bubbles","cancelable","undefined","evt","createEvent","initCustomEvent","prototype","Event","blueprintUpdatedEvent","_ref2","dispatchEvent","id","depth","condition","_clauses$","component","meta","clauses","refinements","selected","newInput","clause","forEach","refinement","condition_id","changeDelegate","delegate","blueprintValue","conditions","conditionsValue","classNameValue","conditionsLookup","reduce","lookup","loadingTimeout","abnegate","clearTimeout","setTimeout","loadingTarget","classList","remove","add","conditionConfigFor","conditionId","find","c","defaultConditionIdValue","length","push","word","splice","previous","next","previousIsOr","nextIsRightParen","previousIsLeftParen","isLastInGroup","replaceCriterion","criterionRow","Error","existingCriterion","newCriterion","isEqual","inputId","blueprintPath","split","Array","className","refreshUrl","clientId","validateBlueprintUrl","defaultConditionId","stateDomIdValue","blueprintFieldTarget","value","updateBlueprintField","stateDomId","submit","toggle","contentTargets","node","toggleAttribute","TurboStreamFormController","method","action","turboMethod","filter","toLowerCase","visibleCategories","Set","listItemTargets","listItemNode","listItemValue","includes","hidden","category","categoryTargets","categoryNode","has","initialize","updateBlueprint","debounce","inputKey","refinedFilter","target","select","slice","call","option","map","newConditionId","config","cancelEnter","code","stopPropagation","require","initPluginInstance","teardownPluginInstance","clearDate","$","fieldTarget","val","dispatch","applyDateToField","picker","format","includeTimeValue","timeFormatValue","dateFormatValue","momentVal","moment","startDate","toISOString","displayVal","dataVal","hiddenFieldTarget","trigger","localeValues","pickerLocaleValue","isAmPm","isAmPmValue","daterangepicker","singleDatePicker","timePicker","timePickerIncrement","autoUpdateInput","autoApply","minDate","futureOnlyValue","Date","locale","parentEl","drops","dropsValue","timePicker24Hour","on","showCalendar","pluginMainEl","plugin","data","inlineValue","off","includeTime","futureOnly","inline","dateFormat","timeFormat","datetimeFormat","pickerLocale","controllerDefinitions","AddController","CriterionFormController","DefaultsController","DeleteController","FilterPillsController","PopupController","SearchFilterController","StateController","StoredFilterController","SubmitForm","ToggleController","TurboStreamLinkController","TypeaheadListController","UpdateController","DateController","d","identifier","controllerConstructor"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{Controller as e}from"@hotwired/stimulus";import{FetchRequest as t}from"@rails/request.js";import{useClickOutside as i}from"stimulus-use";import{delegate as r,abnegate as n}from"jquery-events-to-dom-events";import{isEqual as s,debounce as l}from"lodash";import o from"moment";import a from"jquery";import"daterangepicker";function d(e){const t=(e.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(t)return t.replace(/_/g,"-").replace(/\//g,"--")}class u extends e{connect(){this.state.finishUpdate()}get state(){let e=this.element;for(;e!==document.body;){if(e.matches('[data-controller~="refine--state"]'))return this.application.getControllerForElementAndIdentifier(e,"refine--state");e=e.parentNode}return null}async refreshFromServer(e={}){const{includeErrors:i}=e;this.state.startUpdate();const r=new t("GET",this.state.refreshUrlValue,{responseKind:"turbo-stream",query:{"refine_filters_builder[filter_class]":this.state.filterName,"refine_filters_builder[blueprint_json]":JSON.stringify(this.state.blueprint),"refine_filters_builder[client_id]":this.state.clientIdValue,include_errors:!!i}});await r.perform()}}class c extends u{async criterion(){const e=await this.validateBlueprint();e&&this.state.addCriterion(this.previousCriterionIdValue),this.refreshFromServer({includeErrors:!e})}async group(){const e=await this.validateBlueprint();e&&this.state.addGroup(),this.refreshFromServer({includeErrors:!e})}async validateBlueprint(e){const i=new t("GET",this.state.validateBlueprintUrlValue,{query:{"refine_filters_builder[filter_class]":this.state.filterName,"refine_filters_builder[blueprint_json]":JSON.stringify(this.state.blueprint),"refine_filters_builder[client_id]":this.state.clientIdValue}});return(await i.perform()).ok}}c.values={previousCriterionId:Number};class h extends e{filterConditions(e){const t=e.currentTarget.value.toLowerCase(),i=new Set;this.conditionTargets.forEach(e=>{e.innerHTML.toLowerCase().includes(t)?(e.hidden=!1,i.add(e.dataset.category)):e.hidden=!0}),this.categoryTargets.forEach(e=>{e.hidden=!i.has(e.innerHTML)})}}h.targets=["condition","category"];class p extends e{refresh(e){const t=new FormData(this.element),i=new URL(this.urlValue);for(const[e,r]of t.entries())console.log(e,r),i.searchParams.set(e,r);window.Turbo.visit(i.toString(),{frame:this.turboFrameValue})}}p.values={url:String,turboFrame:String,method:{type:String,default:"POST"}};class m extends e{connect(){this.state=this.getStateController(),this.state.updateInput(this.criterionIdValue,this.inputValue)}getStateController(){let e=this.element;for(;e!==document.body;){const t=this.application.getControllerForElementAndIdentifier(e,"refine--state");if(t)return t;e=e.parentNode}return null}}m.values={criterionId:Number,input:Object};class f extends u{criterion(){const{state:e,criterionIdValue:t}=this;e.deleteCriterion(t),this.refreshFromServer()}}function g(){return g=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var r in i)Object.prototype.hasOwnProperty.call(i,r)&&(e[r]=i[r])}return e},g.apply(this,arguments)}f.values={criterionId:Number};class b extends e{connect(){const e=new URLSearchParams(window.location.search);this.existingParams=e,this.existingParams.delete("stable_id")}delete(e){const{criterionId:t}=e.currentTarget.dataset;var i=parseInt(t);this.stateController.deleteCriterion(i),this.reloadPage()}async reloadPage(){const{blueprint:e}=this.stateController,i=new t("POST",this.submitUrlValue,{responseKind:"turbo-stream",body:JSON.stringify({refine_filters_builder:{filter_class:this.stateController.filterName,blueprint_json:JSON.stringify(e),client_id:this.stateController.clientIdValue}})});await i.perform()}redirectToStableId(e){const t=new URLSearchParams;e&&t.append("stable_id",e);const i=new URLSearchParams(g({},Object.fromEntries(this.existingParams),Object.fromEntries(t))).toString(),r=`${window.location.pathname}?${i}`;history.pushState({},document.title,r),window.location.reload()}get stateController(){return this.element.refineStateController}get stabilizeFilterController(){return this.element.stabilizeFilterController}}b.values={submitUrl:String};class v extends e{connect(){i(this),this.boundHandleKeyUp=this.handleKeyUp.bind(this),document.addEventListener("keyup",this.boundHandleKeyUp)}disconnect(){document.removeEventListener("keyup",this.boundHandleKeyUp)}show(e){e.preventDefault(),this.frameTarget.src=this.srcValue,this.isOpenValue=!0}hide(e){this.isOpenValue&&(null==e||e.preventDefault(),this.frameTarget.innerHTML="",this.isOpenValue=!1)}clickOutside(e){this.hide(e)}handleKeyUp(e){"Escape"!==e.key&&"Esc"!==e.key||this.hide(e)}}v.targets=["frame"],v.values={src:String,isOpen:{type:Boolean,default:!1}};class w extends e{search(e){e.preventDefault(),this.submitFilter(),document.activeElement.blur()}async submitFilter(){const{blueprint:e}=this.stateController,i=new t("POST",this.submitUrlValue,{responseKind:"turbo-stream",body:JSON.stringify({refine_filters_builder:{filter_class:this.stateController.filterName,blueprint_json:JSON.stringify(e),client_id:this.stateController.clientIdValue}})});await i.perform()}get stateController(){return this.element.querySelector('[data-controller~="refine--state"]').refineStateController}loadResults({detail:{url:e}}){console.log("filter submit success"),window.Turbo?window.Turbo.visit(e):window.location.href=e}}w.values={submitUrl:String},function(){if("function"==typeof window.CustomEvent)return!1;function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var i=document.createEvent("CustomEvent");return i.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i}e.prototype=window.Event.prototype,window.CustomEvent=e}();const y=(e,{blueprint:t,formId:i})=>{const r=new CustomEvent("blueprint-updated",{bubbles:!0,cancelable:!0,detail:{blueprint:t,formId:i}});e.dispatchEvent(r)},C=(e,t,i)=>{var r;const n=null==i?void 0:i.component,s=(null==i?void 0:i.meta)||{clauses:[],options:{}},l=(null==i?void 0:i.refinements)||[],{clauses:o,options:a}=s;let d;d="option-condition"===n?a[0]?[a[0].id]:[]:void 0;let u={clause:null==(r=o[0])?void 0:r.id,selected:d};return l.forEach(e=>{const{meta:t,component:i}=e,{clauses:r,options:n}=t;let s;s="option-condition"===i?n[0]?[n[0].id]:[]:void 0,u[e.id]={clause:r[0].id,selected:s}}),{depth:t,type:"criterion",condition_id:e,input:u}};class I extends e{connect(){this.element.refineStateController=this,this.changeDelegate=r("change",["event","picker"]),this.blueprint=this.blueprintValue,this.conditions=this.conditionsValue,this.filterName=this.classNameValue,this.conditionsLookup=this.conditions.reduce((e,t)=>(e[t.id]=t,e),{}),this.loadingTimeout=null,y(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}disconnect(){n("change",this.changeDelegate)}startUpdate(){this.loadingTimeout&&window.clearTimeout(this.loadingTimeout),this.loadingTimeout=window.setTimeout(()=>{this.loadingTarget.classList.remove("hidden")},1e3)}finishUpdate(){this.loadingTimeout&&window.clearTimeout(this.loadingTimeout),this.loadingTarget.classList.add("hidden")}conditionConfigFor(e){return this.conditionsLookup[e]}addGroup(){const{conditions:e}=this,t=e.find(e=>e.id==this.defaultConditionIdValue)||e[0];var i;this.blueprint.length>0&&this.blueprint.push({depth:i=void 0===i?0:i,type:"conjunction",word:"or"}),this.blueprint.push(C(t.id,1,t)),y(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}addCriterion(e){const{blueprint:t,conditions:i}=this,r=i.find(e=>e.id==this.defaultConditionIdValue)||i[0];var n;t.splice(e+1,0,{depth:n=void 0===n?1:n,type:"conjunction",word:"and"},C(r.id,1,r)),y(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}deleteCriterion(e){const{blueprint:t}=this,i=t[e-1],r=t[e+1],n=i&&"or"===i.word,s=r&&"or"===r.word||!r,l=n||!i,o=l&&s;i||r?t.splice(o&&n?e-1:o&&!i||l&&!s?e:e-1,2):this.blueprint=[],y(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}replaceCriterion(e,t,i){const r=this.blueprint[e];if("criterion"!==r.type)throw new Error(`You can't call updateConditionId on a non-criterion type. Trying to update ${JSON.stringify(C)}`);const n=this.blueprint[e],l=C(t,r.depth,i);return!s(n,l)&&(this.blueprint[e]=l,y(this.element,{blueprint:this.blueprint,formId:this.formIdValue}),!0)}updateInput(e,t,i){const{blueprint:r}=this,n=r[e],s=(i=i||"input").split(", ");s.length>1?n[s[0]][s[1]]=g({},n[s[0]][s[1]],t):n[i]=g({},n[i],t),y(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}}I.values={blueprint:Array,conditions:Array,className:String,refreshUrl:String,clientId:String,validateBlueprintUrl:String,defaultConditionId:String},I.targets=["loading"];class S extends e{connect(){const e=document.getElementById(this.stateDomIdValue).refineStateController;this.blueprintFieldTarget.value=JSON.stringify(e.blueprint),console.log("connect",this.blueprintFieldTarget.value)}updateBlueprintField(e){if(e.detail.formId!=this.formIdValue)return null;const{detail:t}=e,{blueprint:i}=t;this.blueprintFieldTarget.value=JSON.stringify(i),console.log("update blueprint",this.blueprintFieldTarget.value)}}S.targets=["blueprintField"],S.values={formId:String,stateDomId:String};class T extends e{submit(e){e.preventDefault(),this.element.submit()}}class V extends e{toggle(e){this.contentTargets.forEach(e=>{e.toggleAttribute("hidden")})}}V.targets=["content"];class F extends e{async submit(e){e.preventDefault();const i=new t(this.element.method||"POST",this.element.action,{responseKind:"turbo-stream",body:new FormData(this.element)});await i.perform()}}class E extends e{async visit(e){e.preventDefault();const i=new t(this.element.dataset.turboMethod||"GET",this.element.href,{responseKind:"turbo-stream"});await i.perform()}}class _ extends u{initialize(){this.updateBlueprint=l((e,t,i)=>{this.value(e,t,i)},500)}refinedFilter(e){const{criterionIdValue:t,state:i}=this;i.updateInput(t,{id:e.target.value},e.target.dataset.inputId),this.refreshFromServer()}clause(e){const{criterionIdValue:t,state:i}=this;i.updateInput(t,{clause:e.target.value},e.target.dataset.inputId),this.refreshFromServer()}selected(e){const{target:t}=e,i=Array.prototype.slice.call(t.options).filter(e=>e.selected).map(e=>e.value);this.value(e,i,"selected")}value(e,t,i){const{criterionIdValue:r,state:n}=this,s=e.target.dataset;n.updateInput(r,{[i=i||s.inputKey||"value"]:t=t||e.target.value},s.inputId)}condition(e){const{criterionIdValue:t,state:i}=this,r=e.target;let n=r.value;n||(n=r.querySelector("select").value);const s=this.state.conditionConfigFor(n);i.replaceCriterion(t,n,s)&&this.refreshFromServer()}cancelEnter(e){"Enter"===e.code&&(e.preventDefault(),e.stopPropagation())}}_.values={criterionId:Number},require("daterangepicker/daterangepicker.css");class D extends e{connect(){this.initPluginInstance()}disconnect(){this.teardownPluginInstance()}clearDate(e){e.preventDefault(),window.$(this.fieldTarget).val(""),this.dispatch("value-cleared")}applyDateToField(e,t){const i=this.includeTimeValue?this.timeFormatValue:this.dateFormatValue,r=t?o(t.startDate.toISOString()):o(this.fieldTarget.value,"YYYY-MM-DDTHH:mm").format("YYYY-MM-DDTHH:mm"),n=r.format(i),s=this.includeTimeValue?r.toISOString(!0):r.format("YYYY-MM-DD");this.fieldTarget.value=n,this.hiddenFieldTarget.value=s,window.$(this.fieldTarget).trigger("change",t),this.hiddenFieldTarget.dispatchEvent(new Event("change",{detail:t,bubbles:!0}))}initPluginInstance(){const e=this.pickerLocaleValue,t=this.isAmPmValue;e.format=this.includeTimeValue?this.timeFormatValue:this.dateFormatValue,window.$(this.fieldTarget).daterangepicker({singleDatePicker:!0,timePicker:this.includeTimeValue,timePickerIncrement:5,autoUpdateInput:!1,autoApply:!0,minDate:!!this.futureOnlyValue&&new Date,locale:e,parentEl:a(this.element),drops:this.dropsValue?this.dropsValue:"down",timePicker24Hour:!t}),window.$(this.fieldTarget).on("apply.daterangepicker",this.applyDateToField.bind(this)),window.$(this.fieldTarget).on("cancel.daterangepicker",this.clearDate.bind(this)),window.$(this.fieldTarget).on("showCalendar.daterangepicker",this.showCalendar.bind(this)),this.pluginMainEl=this.fieldTarget,this.plugin=a(this.pluginMainEl).data("daterangepicker"),this.inlineValue&&this.element.classList.add("date-input--inline")}teardownPluginInstance(){void 0!==this.plugin&&(a(this.pluginMainEl).off("apply.daterangepicker"),a(this.pluginMainEl).off("cancel.daterangepicker"),a(this.pluginMainEl).off("showCalendar.daterangepicker"),this.plugin.remove())}showCalendar(){this.dispatch("show-calendar")}}D.targets=["field","hiddenField","clearButton"],D.values={includeTime:Boolean,futureOnly:Boolean,drops:String,inline:Boolean,dateFormat:String,timeFormat:String,isAmPm:Boolean,locale:{type:String,default:"en"},datetimeFormat:{type:String,default:"MM/DD/YYYY h:mm A"},pickerLocale:{type:Object,default:{}}};const j=[[c,"refine/add-controller.js"],[h,"./refine/inline-conditions-controller.js"],[p,"refine/criterion-form-controller.js"],[m,"refine/defaults-controller.js"],[f,"refine/delete-controller.js"],[b,"refine/filter-pills-controller.js"],[v,"refine/popup-controller.js"],[w,"refine/search-filter-controller.js"],[u,"refine/server-refresh-controller.js"],[I,"refine/state-controller.js"],[S,"refine/stored-filter-controller.js"],[T,"refine/submit-form-controller.js"],[V,"refine/toggle-controller.js"],[F,"refine/turbo-stream-form-controller.js"],[E,"refine/turbo-stream-link-controller.js"],[_,"refine/update-controller.js"],[D,"refine/date-controller.js"]].map(function(e){const t=e[0];return{identifier:d(e[1]),controllerConstructor:t}});export{c as AddController,p as CriterionFormController,D as DateController,m as DefaultsController,f as DeleteController,b as FilterPillsController,h as InlineConditionsController,v as PopupController,w as SearchFilterController,u as ServerRefreshController,I as StateController,S as StoredFilterController,T as SubmitForm,V as ToggleController,F as TurboStreamFormController,E as TurboStreamLinkController,_ as UpdateController,j as controllerDefinitions};
1
+ import{Controller as e}from"@hotwired/stimulus";import{FetchRequest as t}from"@rails/request.js";import{useClickOutside as i}from"stimulus-use";import{delegate as r,abnegate as n}from"jquery-events-to-dom-events";import{isEqual as s,debounce as l}from"lodash";import a from"moment";import o from"jquery";import"daterangepicker";function d(e){const t=(e.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(t)return t.replace(/_/g,"-").replace(/\//g,"--")}class u extends e{connect(){this.state.finishUpdate()}get state(){let e=this.element;for(;e!==document.body;){if(e.matches('[data-controller~="refine--state"]'))return this.application.getControllerForElementAndIdentifier(e,"refine--state");e=e.parentNode}return null}async refreshFromServer(e={}){const{includeErrors:i}=e;this.state.startUpdate();const r=new t("GET",this.state.refreshUrlValue,{responseKind:"turbo-stream",query:{"refine_filters_builder[filter_class]":this.state.filterName,"refine_filters_builder[blueprint_json]":JSON.stringify(this.state.blueprint),"refine_filters_builder[client_id]":this.state.clientIdValue,include_errors:!!i}});await r.perform()}}class c extends u{async criterion(){const e=await this.validateBlueprint();e&&this.state.addCriterion(this.previousCriterionIdValue),this.refreshFromServer({includeErrors:!e})}async group(){const e=await this.validateBlueprint();e&&this.state.addGroup(),this.refreshFromServer({includeErrors:!e})}async validateBlueprint(e){const i=new t("GET",this.state.validateBlueprintUrlValue,{query:{"refine_filters_builder[filter_class]":this.state.filterName,"refine_filters_builder[blueprint_json]":JSON.stringify(this.state.blueprint),"refine_filters_builder[client_id]":this.state.clientIdValue}});return(await i.perform()).ok}}c.values={previousCriterionId:Number};class h extends e{async refresh(e){const i=document.getElementById(this.formIdValue),r=new FormData(i),n=new t("GET",this.urlValue,{query:r,responseKind:"turbo-stream"});await n.perform()}}h.values={url:String,formId:String};class p extends e{connect(){this.state=this.getStateController(),this.state.updateInput(this.criterionIdValue,this.inputValue)}getStateController(){let e=this.element;for(;e!==document.body;){const t=this.application.getControllerForElementAndIdentifier(e,"refine--state");if(t)return t;e=e.parentNode}return null}}p.values={criterionId:Number,input:Object};class m extends u{criterion(){const{state:e,criterionIdValue:t}=this;e.deleteCriterion(t),this.refreshFromServer()}}function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var r in i)Object.prototype.hasOwnProperty.call(i,r)&&(e[r]=i[r])}return e},f.apply(this,arguments)}m.values={criterionId:Number};class g extends e{connect(){const e=new URLSearchParams(window.location.search);this.existingParams=e,this.existingParams.delete("stable_id")}delete(e){const{criterionId:t}=e.currentTarget.dataset;var i=parseInt(t);this.stateController.deleteCriterion(i),this.reloadPage()}async reloadPage(){const{blueprint:e}=this.stateController,i=new t("POST",this.submitUrlValue,{responseKind:"turbo-stream",body:JSON.stringify({refine_filters_builder:{filter_class:this.stateController.filterName,blueprint_json:JSON.stringify(e),client_id:this.stateController.clientIdValue}})});await i.perform()}redirectToStableId(e){const t=new URLSearchParams;e&&t.append("stable_id",e);const i=new URLSearchParams(f({},Object.fromEntries(this.existingParams),Object.fromEntries(t))).toString(),r=`${window.location.pathname}?${i}`;history.pushState({},document.title,r),window.location.reload()}get stateController(){return this.element.refineStateController}get stabilizeFilterController(){return this.element.stabilizeFilterController}}g.values={submitUrl:String};class b extends e{connect(){i(this),this.boundHandleKeyUp=this.handleKeyUp.bind(this),document.addEventListener("keyup",this.boundHandleKeyUp)}disconnect(){document.removeEventListener("keyup",this.boundHandleKeyUp)}show(e){e.preventDefault(),this.frameTarget.src=this.srcValue,this.isOpenValue=!0}hide(e){this.isOpenValue&&(null==e||e.preventDefault(),this.frameTarget.innerHTML="",this.isOpenValue=!1)}clickOutside(e){this.hide(e)}handleKeyUp(e){"Escape"!==e.key&&"Esc"!==e.key||this.hide(e)}}b.targets=["frame"],b.values={src:String,isOpen:{type:Boolean,default:!1}};class v extends e{search(e){e.preventDefault(),this.submitFilter(),document.activeElement.blur()}async submitFilter(){const{blueprint:e}=this.stateController,i=new t("POST",this.submitUrlValue,{responseKind:"turbo-stream",body:JSON.stringify({refine_filters_builder:{filter_class:this.stateController.filterName,blueprint_json:JSON.stringify(e),client_id:this.stateController.clientIdValue}})});await i.perform()}get stateController(){return this.element.querySelector('[data-controller~="refine--state"]').refineStateController}loadResults({detail:{url:e}}){console.log("filter submit success"),window.Turbo?window.Turbo.visit(e):window.location.href=e}}v.values={submitUrl:String},function(){if("function"==typeof window.CustomEvent)return!1;function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var i=document.createEvent("CustomEvent");return i.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i}e.prototype=window.Event.prototype,window.CustomEvent=e}();const w=(e,{blueprint:t,formId:i})=>{const r=new CustomEvent("blueprint-updated",{bubbles:!0,cancelable:!0,detail:{blueprint:t,formId:i}});e.dispatchEvent(r)},y=(e,t,i)=>{var r;const n=null==i?void 0:i.component,s=(null==i?void 0:i.meta)||{clauses:[],options:{}},l=(null==i?void 0:i.refinements)||[],{clauses:a,options:o}=s;let d;d="option-condition"===n?o[0]?[o[0].id]:[]:void 0;let u={clause:null==(r=a[0])?void 0:r.id,selected:d};return l.forEach(e=>{const{meta:t,component:i}=e,{clauses:r,options:n}=t;let s;s="option-condition"===i?n[0]?[n[0].id]:[]:void 0,u[e.id]={clause:r[0].id,selected:s}}),{depth:t,type:"criterion",condition_id:e,input:u}};class I extends e{connect(){this.element.refineStateController=this,this.changeDelegate=r("change",["event","picker"]),this.blueprint=this.blueprintValue,this.conditions=this.conditionsValue,this.filterName=this.classNameValue,this.conditionsLookup=this.conditions.reduce((e,t)=>(e[t.id]=t,e),{}),this.loadingTimeout=null,w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}disconnect(){n("change",this.changeDelegate)}startUpdate(){this.loadingTimeout&&window.clearTimeout(this.loadingTimeout),this.loadingTimeout=window.setTimeout(()=>{this.loadingTarget.classList.remove("hidden")},1e3)}finishUpdate(){this.loadingTimeout&&window.clearTimeout(this.loadingTimeout),this.loadingTarget.classList.add("hidden")}conditionConfigFor(e){return this.conditionsLookup[e]}addGroup(){const{conditions:e}=this,t=e.find(e=>e.id==this.defaultConditionIdValue)||e[0];var i;this.blueprint.length>0&&this.blueprint.push({depth:i=void 0===i?0:i,type:"conjunction",word:"or"}),this.blueprint.push(y(t.id,1,t)),w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}addCriterion(e){const{blueprint:t,conditions:i}=this,r=i.find(e=>e.id==this.defaultConditionIdValue)||i[0];var n;t.splice(e+1,0,{depth:n=void 0===n?1:n,type:"conjunction",word:"and"},y(r.id,1,r)),w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}deleteCriterion(e){const{blueprint:t}=this,i=t[e-1],r=t[e+1],n=i&&"or"===i.word,s=r&&"or"===r.word||!r,l=n||!i,a=l&&s;i||r?t.splice(a&&n?e-1:a&&!i||l&&!s?e:e-1,2):this.blueprint=[],w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}replaceCriterion(e,t,i){const r=this.blueprint[e];if("criterion"!==r.type)throw new Error(`You can't call updateConditionId on a non-criterion type. Trying to update ${JSON.stringify(y)}`);const n=this.blueprint[e],l=y(t,r.depth,i);return!s(n,l)&&(this.blueprint[e]=l,w(this.element,{blueprint:this.blueprint,formId:this.formIdValue}),!0)}updateInput(e,t,i){const{blueprint:r}=this,n=r[e],s=(i=i||"input").split(", ");s.length>1?n[s[0]][s[1]]=f({},n[s[0]][s[1]],t):n[i]=f({},n[i],t),w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}}I.values={blueprint:Array,conditions:Array,className:String,refreshUrl:String,clientId:String,validateBlueprintUrl:String,defaultConditionId:String},I.targets=["loading"];class C extends e{connect(){const e=document.getElementById(this.stateDomIdValue).refineStateController;this.blueprintFieldTarget.value=JSON.stringify(e.blueprint),console.log("connect",this.blueprintFieldTarget.value)}updateBlueprintField(e){if(e.detail.formId!=this.formIdValue)return null;const{detail:t}=e,{blueprint:i}=t;this.blueprintFieldTarget.value=JSON.stringify(i),console.log("update blueprint",this.blueprintFieldTarget.value)}}C.targets=["blueprintField"],C.values={formId:String,stateDomId:String};class S extends e{submit(e){e.preventDefault(),this.element.submit()}}class T extends e{toggle(e){this.contentTargets.forEach(e=>{e.toggleAttribute("hidden")})}}T.targets=["content"];class V extends e{async submit(e){e.preventDefault();const i=new t(this.element.method||"POST",this.element.action,{responseKind:"turbo-stream",body:new FormData(this.element)});await i.perform()}}class E extends e{async visit(e){e.preventDefault();const i=new t(this.element.dataset.turboMethod||"GET",this.element.href,{responseKind:"turbo-stream"});await i.perform()}}class F extends e{filter(e){const t=e.currentTarget.value.toLowerCase(),i=new Set;this.listItemTargets.forEach(e=>{e.dataset.listItemValue.toLowerCase().includes(t)?(e.hidden=!1,i.add(e.dataset.category)):e.hidden=!0}),this.categoryTargets.forEach(e=>{e.hidden=!i.has(e.innerHTML)})}}F.targets=["listItem","category"];class _ extends u{initialize(){this.updateBlueprint=l((e,t,i)=>{this.value(e,t,i)},500)}refinedFilter(e){const{criterionIdValue:t,state:i}=this;i.updateInput(t,{id:e.target.value},e.target.dataset.inputId),this.refreshFromServer()}clause(e){const{criterionIdValue:t,state:i}=this;i.updateInput(t,{clause:e.target.value},e.target.dataset.inputId),this.refreshFromServer()}selected(e){const{target:t}=e,i=Array.prototype.slice.call(t.options).filter(e=>e.selected).map(e=>e.value);this.value(e,i,"selected")}value(e,t,i){const{criterionIdValue:r,state:n}=this,s=e.target.dataset;n.updateInput(r,{[i=i||s.inputKey||"value"]:t=t||e.target.value},s.inputId)}condition(e){const{criterionIdValue:t,state:i}=this,r=e.target;let n=r.value;n||(n=r.querySelector("select").value);const s=this.state.conditionConfigFor(n);i.replaceCriterion(t,n,s)&&this.refreshFromServer()}cancelEnter(e){"Enter"===e.code&&(e.preventDefault(),e.stopPropagation())}}_.values={criterionId:Number},require("daterangepicker/daterangepicker.css");class D extends e{connect(){this.initPluginInstance()}disconnect(){this.teardownPluginInstance()}clearDate(e){e.preventDefault(),window.$(this.fieldTarget).val(""),this.dispatch("value-cleared")}applyDateToField(e,t){const i=this.includeTimeValue?this.timeFormatValue:this.dateFormatValue,r=t?a(t.startDate.toISOString()):a(this.fieldTarget.value,"YYYY-MM-DDTHH:mm").format("YYYY-MM-DDTHH:mm"),n=r.format(i),s=this.includeTimeValue?r.toISOString(!0):r.format("YYYY-MM-DD");this.fieldTarget.value=n,this.hiddenFieldTarget.value=s,window.$(this.fieldTarget).trigger("change",t),this.hiddenFieldTarget.dispatchEvent(new Event("change",{detail:t,bubbles:!0}))}initPluginInstance(){const e=this.pickerLocaleValue,t=this.isAmPmValue;e.format=this.includeTimeValue?this.timeFormatValue:this.dateFormatValue,window.$(this.fieldTarget).daterangepicker({singleDatePicker:!0,timePicker:this.includeTimeValue,timePickerIncrement:5,autoUpdateInput:!1,autoApply:!0,minDate:!!this.futureOnlyValue&&new Date,locale:e,parentEl:o(this.element),drops:this.dropsValue?this.dropsValue:"down",timePicker24Hour:!t}),window.$(this.fieldTarget).on("apply.daterangepicker",this.applyDateToField.bind(this)),window.$(this.fieldTarget).on("cancel.daterangepicker",this.clearDate.bind(this)),window.$(this.fieldTarget).on("showCalendar.daterangepicker",this.showCalendar.bind(this)),this.pluginMainEl=this.fieldTarget,this.plugin=o(this.pluginMainEl).data("daterangepicker"),this.inlineValue&&this.element.classList.add("date-input--inline")}teardownPluginInstance(){void 0!==this.plugin&&(o(this.pluginMainEl).off("apply.daterangepicker"),o(this.pluginMainEl).off("cancel.daterangepicker"),o(this.pluginMainEl).off("showCalendar.daterangepicker"),this.plugin.remove())}showCalendar(){this.dispatch("show-calendar")}}D.targets=["field","hiddenField","clearButton"],D.values={includeTime:Boolean,futureOnly:Boolean,drops:String,inline:Boolean,dateFormat:String,timeFormat:String,isAmPm:Boolean,locale:{type:String,default:"en"},datetimeFormat:{type:String,default:"MM/DD/YYYY h:mm A"},pickerLocale:{type:Object,default:{}}};const j=[[c,"refine/add-controller.js"],[h,"refine/criterion-form-controller.js"],[p,"refine/defaults-controller.js"],[m,"refine/delete-controller.js"],[g,"refine/filter-pills-controller.js"],[b,"refine/popup-controller.js"],[v,"refine/search-filter-controller.js"],[u,"refine/server-refresh-controller.js"],[I,"refine/state-controller.js"],[C,"refine/stored-filter-controller.js"],[S,"refine/submit-form-controller.js"],[T,"refine/toggle-controller.js"],[V,"refine/turbo-stream-form-controller.js"],[E,"refine/turbo-stream-link-controller.js"],[F,"./refine/typeahead-list-controller.js"],[_,"refine/update-controller.js"],[D,"refine/date-controller.js"]].map(function(e){const t=e[0];return{identifier:d(e[1]),controllerConstructor:t}});export{c as AddController,h as CriterionFormController,D as DateController,p as DefaultsController,m as DeleteController,g as FilterPillsController,b as PopupController,v as SearchFilterController,u as ServerRefreshController,I as StateController,C as StoredFilterController,S as SubmitForm,T as ToggleController,V as TurboStreamFormController,E as TurboStreamLinkController,F as TypeaheadListController,_ as UpdateController,j as controllerDefinitions};
2
2
  //# sourceMappingURL=refine-stimulus.modern.js.map