{"ast":null,"code":"import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { useCallback, useEffect, useMemo, useReducer } from 'react';\nimport groupBy from 'lodash/groupBy';\nimport intersection from 'lodash/intersection';\nimport uniq from 'lodash/uniq';\nimport { useRouter } from 'next/router';\nimport { useRunningRequest } from '~/hooks/useRequest';\nvar ActionType;\n\n(function (ActionType) {\n  ActionType[ActionType[\"setRuns\"] = 0] = \"setRuns\";\n  ActionType[ActionType[\"initTags\"] = 1] = \"initTags\";\n  ActionType[ActionType[\"setTags\"] = 2] = \"setTags\";\n  ActionType[ActionType[\"setFilteredTags\"] = 3] = \"setFilteredTags\";\n})(ActionType || (ActionType = {}));\n\nvar groupTags = function groupTags(runs, tags) {\n  return Object.entries(groupBy(runs // get tags of selected runs\n  .filter(function (run) {\n    return runs.includes(run);\n  }) // group by runs\n  .reduce(function (prev, run) {\n    if (tags && tags[run]) {\n      Array.prototype.push.apply(prev, tags[run].map(function (label) {\n        return {\n          label: label,\n          run: run\n        };\n      }));\n    }\n\n    return prev;\n  }, []), function (tag) {\n    return tag.label;\n  })).map(function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n        label = _ref2[0],\n        tags = _ref2[1];\n\n    return {\n      label: label,\n      runs: tags.map(function (tag) {\n        return tag.run;\n      })\n    };\n  });\n};\n\nvar reducer = function reducer(state, action) {\n  switch (action.type) {\n    case ActionType.setRuns:\n      var runTags = groupTags(action.payload, state.initTags);\n      return _objectSpread({}, state, {\n        runs: action.payload,\n        tags: runTags,\n        filteredTags: runTags\n      });\n\n    case ActionType.initTags:\n      var newTags = groupTags(state.runs, action.payload);\n      return _objectSpread({}, state, {\n        initTags: action.payload,\n        tags: newTags,\n        filteredTags: newTags\n      });\n\n    case ActionType.setTags:\n      return _objectSpread({}, state, {\n        tags: action.payload,\n        filteredTags: action.payload\n      });\n\n    case ActionType.setFilteredTags:\n      return _objectSpread({}, state, {\n        filteredTags: action.payload\n      });\n\n    default:\n      throw new Error();\n  }\n};\n\nvar useTagFilter = function useTagFilter(type, running) {\n  var router = useRouter();\n\n  var _useRunningRequest = useRunningRequest('/runs', running),\n      runs = _useRunningRequest.data,\n      loadingRuns = _useRunningRequest.loading;\n\n  var _useRunningRequest2 = useRunningRequest(\"/\".concat(type, \"/tags\"), running),\n      tags = _useRunningRequest2.data,\n      loadingTags = _useRunningRequest2.loading;\n\n  var selectedRuns = useMemo(function () {\n    return runs ? router.query.runs ? intersection(uniq(Array.isArray(router.query.runs) ? router.query.runs : router.query.runs.split(',')), runs) : runs : [];\n  }, [router, runs]);\n\n  var _useReducer = useReducer(reducer, {\n    runs: selectedRuns,\n    initTags: {},\n    tags: groupTags(selectedRuns, tags)\n  }, function (initArgs) {\n    return _objectSpread({}, initArgs, {\n      filteredTags: initArgs.tags\n    });\n  }),\n      state = _useReducer[0],\n      dispatch = _useReducer[1];\n\n  var onChangeRuns = useCallback(function (runs) {\n    return dispatch({\n      type: ActionType.setRuns,\n      payload: runs\n    });\n  }, [dispatch]);\n  var onInitTags = useCallback(function (tags) {\n    return dispatch({\n      type: ActionType.initTags,\n      payload: tags\n    });\n  }, [dispatch]);\n  var onFilterTags = useCallback(function (tags) {\n    return dispatch({\n      type: ActionType.setFilteredTags,\n      payload: tags\n    });\n  }, [dispatch]);\n  useEffect(function () {\n    return onInitTags(tags || {});\n  }, [onInitTags, tags]);\n  useEffect(function () {\n    return onChangeRuns(selectedRuns);\n  }, [onChangeRuns, selectedRuns]);\n  return {\n    runs: runs,\n    tags: state.tags,\n    selectedRuns: state.runs,\n    selectedTags: state.filteredTags,\n    onChangeRuns: onChangeRuns,\n    onFilterTags: onFilterTags,\n    loadingRuns: loadingRuns,\n    loadingTags: loadingTags\n  };\n};\n\nexport default useTagFilter;","map":null,"metadata":{},"sourceType":"module"}