@clickview/lite 0.71.0-rc.1 → 0.71.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/css/{7309-lite-7a7d50455e.chunk.css → 7309-lite-b864b38424.chunk.css} +1 -1
- package/dist/css/8046-lite-aee4b235e4.chunk.css +1 -0
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1667-ff0760e5f7-lite.chunk.js → 1667-127d37ccea-lite.chunk.js} +3 -3
- package/dist/scripts/1667-127d37ccea-lite.chunk.js.map +1 -0
- package/dist/scripts/{2888-cf6214a94f-lite.chunk.js → 2888-1340a429ad-lite.chunk.js} +2 -2
- package/dist/scripts/{2888-cf6214a94f-lite.chunk.js.map → 2888-1340a429ad-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3909-99010942d2-lite.chunk.js → 3909-a9c3ad2df0-lite.chunk.js} +2 -2
- package/dist/scripts/{3909-99010942d2-lite.chunk.js.map → 3909-a9c3ad2df0-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5343-96e3cb1b06-lite.chunk.js → 5343-2d293449a3-lite.chunk.js} +2 -2
- package/dist/scripts/{5343-96e3cb1b06-lite.chunk.js.map → 5343-2d293449a3-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5634-52e43f2642-lite.chunk.js → 5634-902d60b98b-lite.chunk.js} +2 -2
- package/dist/scripts/{5634-52e43f2642-lite.chunk.js.map → 5634-902d60b98b-lite.chunk.js.map} +1 -1
- package/dist/scripts/7309-2c6299bbc3-lite.chunk.js +2 -0
- package/dist/scripts/7309-2c6299bbc3-lite.chunk.js.map +1 -0
- package/dist/scripts/8046-590720816e-lite.chunk.js +2 -0
- package/dist/scripts/8046-590720816e-lite.chunk.js.map +1 -0
- package/dist/scripts/bundle-d5b9393a22.min.js +3 -0
- package/dist/scripts/{bundle-6fdfe2f9c9.min.js.map → bundle-d5b9393a22.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/css/8046-lite-319bb5a9c1.chunk.css +0 -1
- package/dist/scripts/1667-ff0760e5f7-lite.chunk.js.map +0 -1
- package/dist/scripts/7309-bacbab59b3-lite.chunk.js +0 -2
- package/dist/scripts/7309-bacbab59b3-lite.chunk.js.map +0 -1
- package/dist/scripts/8046-42928149ee-lite.chunk.js +0 -2
- package/dist/scripts/8046-42928149ee-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-6fdfe2f9c9.min.js +0 -3
- /package/dist/scripts/{1667-ff0760e5f7-lite.chunk.js.LICENSE.txt → 1667-127d37ccea-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-6fdfe2f9c9.min.js.LICENSE.txt → bundle-d5b9393a22.min.js.LICENSE.txt} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[5634],{13109:(e,t,r)=>{r.d(t,{J:()=>D});var n=r(32735),i=r(75896),o=r(1048),a=r(8935),l=r(11607),c=r(83345),u="search.filterActions";function s(e){return n.createElement("div",{className:"d-flex justify-content-between ".concat(e.className)},e.active?n.createElement(l.L,{className:"text-secondary hover-text-underline cursor-pointer",onClick:e.onClickReset},n.createElement(c.x,{namespace:u,phrase:"reset"})):n.createElement("div",{className:"invisible"}),n.createElement(l.L,{className:"info-link",onClick:e.onClickApply},n.createElement(c.x,{namespace:u,phrase:"apply"})))}s.defaultProps={active:!1,className:""};var f=r(96675),m=r(67286),d=r(83914);const y={hideCaret:"KDq7l",filterMenu:"E9o_Q",twoColumnsWidth:"C70vU",nestedCheckboxesWidth:"kUHcg",switchWidth:"bi1FH",moreFiltersWidth:"rbr22",svgContainer:"UwDMA"};function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,i,o,a,l=[],c=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?b(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function h(e){var t=n.useContext(f.f).state,r=t[e.filter.id],i="dropdown"===e.filter.type,o=v(n.useState(e.filter.name),2),l=o[0],c=o[1],u=v(n.useState(!1),2),b=u[0],h=u[1],g=v(n.useState(r),2),S=g[0],E=g[1];function C(e){E(e),i&&w(e)}function w(){var n,i,o,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:S;m.qr.applyFilter([e.filter],r,(n={},i=e.filter.id,o=a,(i=function(e){var t=function(e){if("object"!=p(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==p(t)?t:t+""}(i))in n?Object.defineProperty(n,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):n[i]=o,n),t.appLink)}n.useEffect((function(){c(m.qr.getLabel(e.filter,r)),E(r)}),[e.filter,null==r?void 0:r.selection]);var k,F=n.useMemo((function(){return e.filter.customComponent?e.filter.customComponent:m.qr.mapTypeToComponent(e.filter.type)}),[e.filter.type]),j=e.hideCaret&&!i?y.hideCaret:"",x=(k=e.filter,m.qr.displayTwoColumns(k)?y.twoColumnsWidth:"classification"===k.id?y.classificationWidth:m.qr.displayTwoLayers(k)?y.nestedCheckboxesWidth:"switch"===k.type?y.switchWidth:"");return"button"===e.filter.type?n.createElement(F,{filter:e.filter,draftState:S,setDraftState:C}):n.createElement(a.Z,{onToggle:function(e){h(e),e||i||w()},show:b},n.createElement(a.Z.Toggle,{id:"filterButton-".concat(e.filter.id),className:"".concat("fw-semibold mx-1 btn d-flex align-items-center"," ").concat(j),variant:r.active&&!i?"dark":"outline-dark",disabled:e.filter.disabled},!!e.filter.icon&&n.createElement("div",{className:y.svgContainer},n.createElement(d.x,{svgName:e.filter.icon})),e.filter.labelPrefix," ",l),n.createElement(a.Z.Menu,null,n.createElement("div",{className:"mx-1 ".concat(y.filterMenu," ").concat(x," ").concat(i?"":"px-2 py-1")},n.createElement(F,{filter:e.filter,draftState:S,setDraftState:C}),!i&&!e.filter.disabled&&n.createElement(s,{active:S.active,onClickReset:function(){var t,r=null===(t=e.filter.options)||void 0===t?void 0:t.find((function(e){return e.default}));E({active:!1,selection:r?[r]:[]})},onClickApply:function(){w(),h(!1)}}))))}h.defaultProps={hideCaret:!0};var g=r(91967);function S(e){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},S(e)}var E={getSetStateByKey:function(e,t,r){return function(n){return e((function(e){var i,o,a,l=g.q.isFunction(r)?r:g.q.useIdentity();return Object.assign(Object.assign({},e),(i={},o=t,a=l(n,e),(o=function(e){var t=function(e){if("object"!=S(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=S(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==S(t)?t:t+""}(o))in i?Object.defineProperty(i,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):i[o]=a,i))}))}}};function C(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,i,o,a,l=[],c=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return w(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?w(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function k(e){return Object.keys(e).reduce((function(t,r){return e[r].active?t+1:t}),0)}function F(e){var t=n.useContext(f.f).state,r=t.moreFilters,i=C(n.useState(e.filter.name),2),o=i[0],l=i[1],c=C(n.useState(!1),2),u=c[0],d=c[1],p=C(n.useState(r),2),v=p[0],b=p[1],h=C(n.useState(k(r)),2),g=h[0],S=h[1],w=Object.keys(r).map((function(e){return"".concat(e,":").concat(r[e].active)})).join("-");function F(){m.qr.applyFilter(e.filter.filters,r,v,t.appLink)}n.useEffect((function(){b(r),S(k(r))}),[e.filter,w]),n.useEffect((function(){l(g?"".concat(e.filter.name," - ").concat(g):e.filter.name)}),[g]);var j="fw-semibold ".concat(y.hideCaret," mx-1 btn");return n.createElement(a.Z,{onToggle:function(e){d(e),e||F()},show:u},n.createElement(a.Z.Toggle,{id:e.filter.id,className:j,variant:g?"dark":"outline-dark"},o),n.createElement(a.Z.Menu,{onClick:function(e){return e.stopPropagation()}},n.createElement("div",{className:"mx-1 ".concat(y.moreFiltersWidth," ").concat("dropdown"!==e.filter.type?"px-2 py-1":"")},e.filter.filters.map((function(e){var t=e.customComponent?e.customComponent:m.qr.mapTypeToComponent(e.type);return n.createElement("fieldset",{key:e.id},n.createElement(t,{filter:e,draftState:v[e.id],setDraftState:E.getSetStateByKey(b,e.id),isOnMoreFilters:!0}))})),n.createElement(s,{active:!!Object.keys(v).find((function(e){return v[e].active})),onClickReset:function(){var t=Object.keys(r).reduce((function(t,r){var n,i=null===(n=e.filter.filters.find((function(e){return e.id===r})).options)||void 0===n?void 0:n.find((function(e){return e.default}));return t[r]={active:!1,selection:i?[i]:[]},t}),{});b(t)},onClickApply:function(){F(),d(!1)}}))))}var j=r(14346),x=n.memo((function(e){var t=e.tagClass,r="partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ".concat(void 0===t?"":t," ").concat(j.Z.partialTag);return n.createElement("div",{className:"mt-1"},n.createElement("span",{className:r}," "))})),A=r(22171),O=r(16035);function q(e){var t=e.selectedItems.find((function(t){return t.id===e.data.id}))?"bg-gray-900 text-white":"bg-light";return n.createElement(O.z,{tag:e.data,appLink:e.appLink,tagClass:"no-decoration ".concat(t," lh-1"),onClick:function(){return e.onClick(e.data)}})}const I={tagItem:"j84HW"};function N(e){return N="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},N(e)}function P(e){return function(e){if(Array.isArray(e))return T(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return T(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?T(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function T(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function L(e){var t,r,i,o,a=n.useContext(f.f).state;if(!(null===(t=e.filter)||void 0===t?void 0:t.id))return n.createElement(n.Fragment,null);var l=a[e.filter.id],c=l.selection,u=null!==(o=null===(i=null===(r=e.filter)||void 0===r?void 0:r.options)||void 0===i?void 0:i.filter((function(e){return!(null==c?void 0:c.find((function(t){return t.id===e.id})))})))&&void 0!==o?o:[];function s(t){var r,n,i,o=null,u=-1;if(c.find((function(e,r){u>-1||e.id.toString()===t.id.toString()&&(u=r)})),u>=0){var s=[].concat(P(c.slice(0,u)),P(c.slice(u+1)));o={active:!!s.length,selection:s}}else o={active:!0,selection:c.concat(t)};m.qr.applyFilter([e.filter],l,(r={},n=e.filter.id,i=o,(n=function(e){var t=function(e){if("object"!=N(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=N(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==N(t)?t:t+""}(n))in r?Object.defineProperty(r,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[n]=i,r),a.appLink)}var d,y=[].concat(P(c),P(e.isFetching?[]:u));return n.createElement("div",{className:e.isFetching||y.length?"py-2":""},n.createElement("div",{className:(d="mb-3",y.length&&e.isFetching?d+=" mt-n1":y.length||e.isFetching||(d+=" d-none"),d)},(!!y.length||e.isFetching)&&n.createElement(A.e,{collection:y,childComponent:function(e){return n.createElement(q,Object.assign({},e,{selectedItems:c,onClick:s}))},staticChildren:e.isFetching?new Array(3).fill({component:function(){return n.createElement(x,{tagClass:I.tagItem})},position:"end"}):[],partialLoadingComponent:function(){return n.createElement("div",{className:"me-2"},n.createElement(x,{tagClass:"".concat(I.tagItem)}))}})))}var R=r(81886);function M(e){var t=n.useContext(f.f).state;return n.createElement(l.L,{onClick:function(){R.Q.C$.trigger(Object.assign(Object.assign({},t.appLink),{params:e.currentQueryParam?{query:e.currentQueryParam}:null}))},className:"".concat(e.alignLeft?"order-first":""," hover-text-underline cursor-pointer d-flex align-items-center mx-2")},n.createElement(c.x,{namespace:"search.resetButton",phrase:"reset"}))}var Q=r(13170);function W(e){return function(e){if(Array.isArray(e))return _(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Z(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Z(e,t){if(e){if("string"==typeof e)return _(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_(e,t):void 0}}function _(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function D(e){var t,r,a=e.queryParams,l=e.appLink,u=e.hideHeading,s=e.isFetchingOptions,d=e.constantIndices,y=void 0===d?[]:d,p=n.useMemo((function(){return m.qr.deriveInitialStateFromQuery(a,e.mainFilters,e.moreFilters,l)}),[a,s]),v=(t=n.useReducer(f.O,p),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,i,o,a,l=[],c=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(t,r)||Z(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),b=v[0],g=v[1];n.useEffect((function(){o.t.isEqual(p,b)||(g({type:"update",payload:p}),e.analyticsOptions&&m.qr.logFilterEvent(e.mainFilters,e.moreFilters,p,a.query,e.analyticsOptions))}),[p]);var S=i.m.uniq([].concat(W(m.qr.getAppliedIndices(a,e._hasNewSearch)),W(y))),E=m.qr.mixinDisabledFields(b,S,e.mainFilters,e.moreFilters),C=E.mainFilters,w=E.moreFilters,k=C.filter((function(e){return"tag"!==e.type})),j=C.find((function(e){return"tag"===e.type}));return n.createElement(f.f.Provider,{value:{state:b,dispatch:g}},n.createElement(c.D.Provider,{value:"search.searchFilters"},n.createElement("section",null,n.createElement("div",{className:"d-flex ".concat(e.hideDivider?"":"border-bottom pb-3 mb-3")},!u&&n.createElement("h2",{className:"h5 mb-0 d-inline-block pe-2 border-end d-flex align-items-center"},n.createElement(c.x,{phrase:"heading"})),n.createElement("div",{className:"d-flex flex-wrap ".concat(Q.Z.filtersContainer," ").concat(u?"":"ms-2")},k.map((function(t){return n.createElement(h,{key:t.id,filter:t,hideCaret:e.hideCaret})})),w&&n.createElement(F,{filter:w}),m.qr.hasActiveFilters(a)&&!e.hideResetButton&&n.createElement(M,{mainFilters:e.mainFilters,moreFilters:e.moreFilters,currentQueryParam:a.query,analyticsOptions:e.analyticsOptions,alignLeft:e.alignResetButtonLeft}))),n.createElement(L,{filter:j,queryParams:a,isFetching:e.isFetchingOptions}))))}},94644:(e,t,r)=>{r.d(t,{r:()=>s});var n=r(50242),i=r(81886),o=r(67058),a=r(14553),l=r(49267),c=r(49075),u={notFound:o.d,forbidden:{rating:a.q,yearLevel:a.q,region:l.a,privacy:a.q},badRequest:c._,internalServerError:c._};function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var a=Object.assign(Object.assign({},u),t);o&&i.Q.Ry.isStatusCodeError(o)&&(o!==n.o.InternalServer?o!==n.o.NotFound?o!==n.o.Forbidden?r.badRequest||i.Q.Ry.throw(new a.badRequest):r.forbidden||i.Q.Ry.throw(new a.forbidden.privacy):r.notFound||i.Q.Ry.throw(new a.notFound):r.internalServerError||i.Q.Ry.throw(new c._))}}},13170:(e,t,r)=>{r.d(t,{Z:()=>n});const n={partialFilterHeading:"O8f8H",partialButton:"ThKam",filtersContainer:"JIp3h"}}}]);
|
|
2
|
-
//# sourceMappingURL=5634-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[5634],{13109:(e,t,r)=>{r.d(t,{J:()=>D});var n=r(32735),i=r(75896),o=r(1048),a=r(8935),l=r(11607),c=r(83345),u="search.filterActions";function s(e){return n.createElement("div",{className:"d-flex justify-content-between ".concat(e.className)},e.active?n.createElement(l.L,{className:"text-secondary hover-text-underline cursor-pointer",onClick:e.onClickReset},n.createElement(c.x,{namespace:u,phrase:"reset"})):n.createElement("div",{className:"invisible"}),n.createElement(l.L,{className:"info-link",onClick:e.onClickApply},n.createElement(c.x,{namespace:u,phrase:"apply"})))}s.defaultProps={active:!1,className:""};var f=r(96675),m=r(70848),d=r(83914);const y={hideCaret:"KDq7l",filterMenu:"E9o_Q",twoColumnsWidth:"C70vU",nestedCheckboxesWidth:"kUHcg",switchWidth:"bi1FH",moreFiltersWidth:"rbr22",svgContainer:"UwDMA"};function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,i,o,a,l=[],c=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?b(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function h(e){var t=n.useContext(f.f).state,r=t[e.filter.id],i="dropdown"===e.filter.type,o=v(n.useState(e.filter.name),2),l=o[0],c=o[1],u=v(n.useState(!1),2),b=u[0],h=u[1],g=v(n.useState(r),2),S=g[0],E=g[1];function C(e){E(e),i&&w(e)}function w(){var n,i,o,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:S;m.qr.applyFilter([e.filter],r,(n={},i=e.filter.id,o=a,(i=function(e){var t=function(e){if("object"!=p(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==p(t)?t:t+""}(i))in n?Object.defineProperty(n,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):n[i]=o,n),t.appLink)}n.useEffect((function(){c(m.qr.getLabel(e.filter,r)),E(r)}),[e.filter,null==r?void 0:r.selection]);var k,F=n.useMemo((function(){return e.filter.customComponent?e.filter.customComponent:m.qr.mapTypeToComponent(e.filter.type)}),[e.filter.type]),j=e.hideCaret&&!i?y.hideCaret:"",x=(k=e.filter,m.qr.displayTwoColumns(k)?y.twoColumnsWidth:"classification"===k.id?y.classificationWidth:m.qr.displayTwoLayers(k)?y.nestedCheckboxesWidth:"switch"===k.type?y.switchWidth:"");return"button"===e.filter.type?n.createElement(F,{filter:e.filter,draftState:S,setDraftState:C}):n.createElement(a.Z,{onToggle:function(e){h(e),e||i||w()},show:b},n.createElement(a.Z.Toggle,{id:"filterButton-".concat(e.filter.id),className:"".concat("fw-semibold mx-1 btn d-flex align-items-center"," ").concat(j),variant:r.active&&!i?"dark":"outline-dark",disabled:e.filter.disabled},!!e.filter.icon&&n.createElement("div",{className:y.svgContainer},n.createElement(d.x,{svgName:e.filter.icon})),e.filter.labelPrefix," ",l),n.createElement(a.Z.Menu,null,n.createElement("div",{className:"mx-1 ".concat(y.filterMenu," ").concat(x," ").concat(i?"":"px-2 py-1")},n.createElement(F,{filter:e.filter,draftState:S,setDraftState:C}),!i&&!e.filter.disabled&&n.createElement(s,{active:S.active,onClickReset:function(){var t,r=null===(t=e.filter.options)||void 0===t?void 0:t.find((function(e){return e.default}));E({active:!1,selection:r?[r]:[]})},onClickApply:function(){w(),h(!1)}}))))}h.defaultProps={hideCaret:!0};var g=r(91967);function S(e){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},S(e)}var E={getSetStateByKey:function(e,t,r){return function(n){return e((function(e){var i,o,a,l=g.q.isFunction(r)?r:g.q.useIdentity();return Object.assign(Object.assign({},e),(i={},o=t,a=l(n,e),(o=function(e){var t=function(e){if("object"!=S(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=S(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==S(t)?t:t+""}(o))in i?Object.defineProperty(i,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):i[o]=a,i))}))}}};function C(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,i,o,a,l=[],c=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return w(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?w(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function k(e){return Object.keys(e).reduce((function(t,r){return e[r].active?t+1:t}),0)}function F(e){var t=n.useContext(f.f).state,r=t.moreFilters,i=C(n.useState(e.filter.name),2),o=i[0],l=i[1],c=C(n.useState(!1),2),u=c[0],d=c[1],p=C(n.useState(r),2),v=p[0],b=p[1],h=C(n.useState(k(r)),2),g=h[0],S=h[1],w=Object.keys(r).map((function(e){return"".concat(e,":").concat(r[e].active)})).join("-");function F(){m.qr.applyFilter(e.filter.filters,r,v,t.appLink)}n.useEffect((function(){b(r),S(k(r))}),[e.filter,w]),n.useEffect((function(){l(g?"".concat(e.filter.name," - ").concat(g):e.filter.name)}),[g]);var j="fw-semibold ".concat(y.hideCaret," mx-1 btn");return n.createElement(a.Z,{onToggle:function(e){d(e),e||F()},show:u},n.createElement(a.Z.Toggle,{id:e.filter.id,className:j,variant:g?"dark":"outline-dark"},o),n.createElement(a.Z.Menu,{onClick:function(e){return e.stopPropagation()}},n.createElement("div",{className:"mx-1 ".concat(y.moreFiltersWidth," ").concat("dropdown"!==e.filter.type?"px-2 py-1":"")},e.filter.filters.map((function(e){var t=e.customComponent?e.customComponent:m.qr.mapTypeToComponent(e.type);return n.createElement("fieldset",{key:e.id},n.createElement(t,{filter:e,draftState:v[e.id],setDraftState:E.getSetStateByKey(b,e.id),isOnMoreFilters:!0}))})),n.createElement(s,{active:!!Object.keys(v).find((function(e){return v[e].active})),onClickReset:function(){var t=Object.keys(r).reduce((function(t,r){var n,i=null===(n=e.filter.filters.find((function(e){return e.id===r})).options)||void 0===n?void 0:n.find((function(e){return e.default}));return t[r]={active:!1,selection:i?[i]:[]},t}),{});b(t)},onClickApply:function(){F(),d(!1)}}))))}var j=r(14346),x=n.memo((function(e){var t=e.tagClass,r="partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ".concat(void 0===t?"":t," ").concat(j.Z.partialTag);return n.createElement("div",{className:"mt-1"},n.createElement("span",{className:r}," "))})),A=r(22171),O=r(16035);function q(e){var t=e.selectedItems.find((function(t){return t.id===e.data.id}))?"bg-gray-900 text-white":"bg-light";return n.createElement(O.z,{tag:e.data,appLink:e.appLink,tagClass:"no-decoration ".concat(t," lh-1"),onClick:function(){return e.onClick(e.data)}})}const I={tagItem:"j84HW"};function N(e){return N="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},N(e)}function P(e){return function(e){if(Array.isArray(e))return T(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return T(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?T(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function T(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function L(e){var t,r,i,o,a=n.useContext(f.f).state;if(!(null===(t=e.filter)||void 0===t?void 0:t.id))return n.createElement(n.Fragment,null);var l=a[e.filter.id],c=l.selection,u=null!==(o=null===(i=null===(r=e.filter)||void 0===r?void 0:r.options)||void 0===i?void 0:i.filter((function(e){return!(null==c?void 0:c.find((function(t){return t.id===e.id})))})))&&void 0!==o?o:[];function s(t){var r,n,i,o=null,u=-1;if(c.find((function(e,r){u>-1||e.id.toString()===t.id.toString()&&(u=r)})),u>=0){var s=[].concat(P(c.slice(0,u)),P(c.slice(u+1)));o={active:!!s.length,selection:s}}else o={active:!0,selection:c.concat(t)};m.qr.applyFilter([e.filter],l,(r={},n=e.filter.id,i=o,(n=function(e){var t=function(e){if("object"!=N(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=N(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==N(t)?t:t+""}(n))in r?Object.defineProperty(r,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[n]=i,r),a.appLink)}var d,y=[].concat(P(c),P(e.isFetching?[]:u));return n.createElement("div",{className:e.isFetching||y.length?"py-2":""},n.createElement("div",{className:(d="mb-3",y.length&&e.isFetching?d+=" mt-n1":y.length||e.isFetching||(d+=" d-none"),d)},(!!y.length||e.isFetching)&&n.createElement(A.e,{collection:y,childComponent:function(e){return n.createElement(q,Object.assign({},e,{selectedItems:c,onClick:s}))},staticChildren:e.isFetching?new Array(3).fill({component:function(){return n.createElement(x,{tagClass:I.tagItem})},position:"end"}):[],partialLoadingComponent:function(){return n.createElement("div",{className:"me-2"},n.createElement(x,{tagClass:"".concat(I.tagItem)}))}})))}var R=r(81886);function M(e){var t=n.useContext(f.f).state;return n.createElement(l.L,{onClick:function(){R.Q.C$.trigger(Object.assign(Object.assign({},t.appLink),{params:e.currentQueryParam?{query:e.currentQueryParam}:null}))},className:"".concat(e.alignLeft?"order-first":""," hover-text-underline cursor-pointer d-flex align-items-center mx-2")},n.createElement(c.x,{namespace:"search.resetButton",phrase:"reset"}))}var Q=r(13170);function W(e){return function(e){if(Array.isArray(e))return _(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Z(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Z(e,t){if(e){if("string"==typeof e)return _(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_(e,t):void 0}}function _(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function D(e){var t,r,a=e.queryParams,l=e.appLink,u=e.hideHeading,s=e.isFetchingOptions,d=e.constantIndices,y=void 0===d?[]:d,p=n.useMemo((function(){return m.qr.deriveInitialStateFromQuery(a,e.mainFilters,e.moreFilters,l)}),[a,s]),v=(t=n.useReducer(f.O,p),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,i,o,a,l=[],c=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==t);c=!0);}catch(e){u=!0,i=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(t,r)||Z(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),b=v[0],g=v[1];n.useEffect((function(){o.t.isEqual(p,b)||(g({type:"update",payload:p}),e.analyticsOptions&&m.qr.logFilterEvent(e.mainFilters,e.moreFilters,p,a.query,e.analyticsOptions))}),[p]);var S=i.m.uniq([].concat(W(m.qr.getAppliedIndices(a,e._hasNewSearch)),W(y))),E=m.qr.mixinDisabledFields(b,S,e.mainFilters,e.moreFilters),C=E.mainFilters,w=E.moreFilters,k=C.filter((function(e){return"tag"!==e.type})),j=C.find((function(e){return"tag"===e.type}));return n.createElement(f.f.Provider,{value:{state:b,dispatch:g}},n.createElement(c.D.Provider,{value:"search.searchFilters"},n.createElement("section",null,n.createElement("div",{className:"d-flex ".concat(e.hideDivider?"":"border-bottom pb-3 mb-3")},!u&&n.createElement("h2",{className:"h5 mb-0 d-inline-block pe-2 border-end d-flex align-items-center"},n.createElement(c.x,{phrase:"heading"})),n.createElement("div",{className:"d-flex flex-wrap ".concat(Q.Z.filtersContainer," ").concat(u?"":"ms-2")},k.map((function(t){return n.createElement(h,{key:t.id,filter:t,hideCaret:e.hideCaret})})),w&&n.createElement(F,{filter:w}),m.qr.hasActiveFilters(a)&&!e.hideResetButton&&n.createElement(M,{mainFilters:e.mainFilters,moreFilters:e.moreFilters,currentQueryParam:a.query,analyticsOptions:e.analyticsOptions,alignLeft:e.alignResetButtonLeft}))),n.createElement(L,{filter:j,queryParams:a,isFetching:e.isFetchingOptions}))))}},94644:(e,t,r)=>{r.d(t,{r:()=>s});var n=r(50242),i=r(81886),o=r(67058),a=r(14553),l=r(49267),c=r(49075),u={notFound:o.d,forbidden:{rating:a.q,yearLevel:a.q,region:l.a,privacy:a.q},badRequest:c._,internalServerError:c._};function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var a=Object.assign(Object.assign({},u),t);o&&i.Q.Ry.isStatusCodeError(o)&&(o!==n.o.InternalServer?o!==n.o.NotFound?o!==n.o.Forbidden?r.badRequest||i.Q.Ry.throw(new a.badRequest):r.forbidden||i.Q.Ry.throw(new a.forbidden.privacy):r.notFound||i.Q.Ry.throw(new a.notFound):r.internalServerError||i.Q.Ry.throw(new c._))}}},13170:(e,t,r)=>{r.d(t,{Z:()=>n});const n={partialFilterHeading:"O8f8H",partialButton:"ThKam",filtersContainer:"JIp3h"}}}]);
|
|
2
|
+
//# sourceMappingURL=5634-902d60b98b-lite.chunk.js.map
|
package/dist/scripts/{5634-52e43f2642-lite.chunk.js.map → 5634-902d60b98b-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/5634-52e43f2642-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/search/components/filter-actions/FilterActions.tsx","file:///app/packages/libs/shared/src/apps/search/components/filter-button/filter-button.scss","file:///app/packages/libs/shared/src/apps/search/components/filter-button/FilterButton.tsx","file:///app/packages/libs/shared/src/utils/StateHelper.ts","file:///app/packages/libs/shared/src/apps/search/components/filter-button/MoreFiltersButton.tsx","file:///app/packages/libs/shared/src/components/tags/PartialTagItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/tag-widget-item/TagWidgetItem.tsx","file:///app/packages/libs/shared/src/apps/search/components/filter-types/tag-filter/tag-filter.scss","file:///app/packages/libs/shared/src/apps/search/components/filter-types/tag-filter/TagFilter.tsx","file:///app/packages/libs/shared/src/apps/search/components/reset-button/ResetButton.tsx","file:///app/packages/libs/shared/src/apps/search/components/search-filters/SearchFilters.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/apps/search/components/search-filters/search-filters.scss"],"sourcesContent":["import * as React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'search.filterActions';\n\ninterface FilterActionsProps {\n className?: string;\n onClickReset: () => void;\n onClickApply: () => void;\n active: boolean;\n}\n\nFilterActions.defaultProps = {\n active: false,\n className: ''\n};\n\nexport function FilterActions(props: FilterActionsProps): JSX.Element {\n return (\n <div className={`d-flex justify-content-between ${props.className}`}>\n {props.active ? (\n <DivButton className='text-secondary hover-text-underline cursor-pointer' onClick={props.onClickReset}>\n <Text namespace={namespace} phrase='reset' />\n </DivButton>\n ) : (\n <div className='invisible' />\n )}\n\n <DivButton className='info-link' onClick={props.onClickApply}>\n <Text namespace={namespace} phrase='apply' />\n </DivButton>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"hideCaret\":\"KDq7l\",\"filterMenu\":\"E9o_Q\",\"twoColumnsWidth\":\"C70vU\",\"nestedCheckboxesWidth\":\"kUHcg\",\"switchWidth\":\"bi1FH\",\"moreFiltersWidth\":\"rbr22\",\"svgContainer\":\"UwDMA\"};","import * as React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { FilterActions } from 'libs/shared/apps/search/components/filter-actions/FilterActions';\nimport { SearchFilter } from 'libs/shared/apps/search/interfaces';\nimport { FilterContext, FilterState } from 'libs/shared/apps/search/reducers';\nimport { FilterHelper } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\n\nimport styles from './filter-button.scss';\n\n/**\n * If your filter requires some customisations to the default width, add a use case here.\n */\nfunction getCustomWidthClass(filter: SearchFilter): string {\n if (FilterHelper.displayTwoColumns(filter))\n return styles.twoColumnsWidth;\n\n // Some classifications has long names, so we make them wider\n if (filter.id === 'classification')\n return styles.classificationWidth;\n \n if (FilterHelper.displayTwoLayers(filter))\n return styles.nestedCheckboxesWidth;\n\n if (filter.type === 'switch')\n return styles.switchWidth;\n\n return '';\n}\n\nFilterButton.defaultProps = {\n hideCaret: true\n};\n\ninterface FilterButtonProps {\n filter: SearchFilter;\n hideCaret?: boolean;\n}\n\nexport function FilterButton(props: FilterButtonProps): JSX.Element {\n const { state } = React.useContext(FilterContext);\n const currentFilterState = state[props.filter.id];\n\n const isDropdownFilter = props.filter.type === 'dropdown';\n\n const [ label, setLabel ] = React.useState(props.filter.name);\n const [ showDropdown, setShowDropdown ] = React.useState(false);\n const [ draftState, setDraftState ] = React.useState<FilterState>(currentFilterState);\n\n React.useEffect(() => {\n setLabel(FilterHelper.getLabel(props.filter, currentFilterState));\n setDraftState(currentFilterState);\n }, [ props.filter, currentFilterState?.selection ]);\n\n function onSelectItem(state: FilterState): void {\n setDraftState(state);\n\n if (isDropdownFilter)\n applyFilter(state);\n }\n\n function onClickReset(): void {\n const defaultOption = props.filter.options?.find(o => o.default);\n\n setDraftState({\n active: false,\n selection: defaultOption ? [defaultOption] : []\n });\n }\n\n function onClickApply(): void {\n applyFilter();\n setShowDropdown(false);\n }\n\n function applyFilter(newState: FilterState = draftState): void {\n FilterHelper.applyFilter(\n [props.filter],\n currentFilterState,\n { [props.filter.id]: newState },\n state.appLink\n );\n }\n\n function onToggleDropdown(isShowing: boolean): void {\n setShowDropdown(isShowing);\n\n if (isShowing || isDropdownFilter)\n return;\n\n // Apply the filter if the dropdown has been closed\n applyFilter();\n }\n\n const FilterComponent = React.useMemo(() => {\n return props.filter.customComponent\n ? props.filter.customComponent\n : FilterHelper.mapTypeToComponent(props.filter.type);\n }, [props.filter.type]);\n\n const baseClass = `fw-semibold mx-1 btn d-flex align-items-center`;\n const caretClass = props.hideCaret && !isDropdownFilter ? styles.hideCaret : '';\n const customWidthClass = getCustomWidthClass(props.filter);\n\n if (props.filter.type === 'button')\n return (\n <FilterComponent\n filter={props.filter}\n draftState={draftState}\n setDraftState={onSelectItem}\n />\n );\n\n return (\n <Dropdown onToggle={onToggleDropdown} show={showDropdown}>\n <Dropdown.Toggle\n id={`filterButton-${props.filter.id}`}\n className={`${baseClass} ${caretClass}`}\n variant={(currentFilterState.active && !isDropdownFilter) ? 'dark' : 'outline-dark'}\n disabled={props.filter.disabled}\n >\n {!!props.filter.icon && (\n <div className={styles.svgContainer}>\n <SvgContainer svgName={props.filter.icon} />\n </div>\n )}\n {props.filter.labelPrefix} {label}\n </Dropdown.Toggle>\n\n <Dropdown.Menu>\n <div className={`mx-1 ${styles.filterMenu} ${customWidthClass} ${!isDropdownFilter ? 'px-2 py-1' : ''}`}>\n <FilterComponent\n filter={props.filter}\n draftState={draftState}\n setDraftState={onSelectItem}\n />\n\n {(!isDropdownFilter && !props.filter.disabled) && (\n <FilterActions\n active={draftState.active}\n onClickReset={onClickReset}\n onClickApply={onClickApply}\n />\n )}\n </div>\n </Dropdown.Menu>\n </Dropdown>\n );\n}\n","import { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nexport const StateHelper = {\n /**\n * Helper function to get the setState function for an individual key in a state object.\n * \n * @param setState React setState action\n * @param key Property within the state object we're updating\n * @param callback Optional callback to modify data before setting state. Uses identity fn by default.\n * \n * @returns Newly updated state object\n */\n getSetStateByKey<T extends HashObject>(\n setState: React.Dispatch<React.SetStateAction<T>>,\n key: keyof T,\n callback?: (data: any, state?: T) => T[keyof T]\n ): (data: any) => void {\n return (data: any) => setState(state => {\n const fn = FunctionHelper.isFunction(callback) ? callback : FunctionHelper.useIdentity<T>();\n return { ...state, [key]: fn(data, state) };\n });\n }\n};","import * as React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { FilterActions } from 'libs/shared/apps/search/components/filter-actions/FilterActions';\nimport { FilterIds, MoreFilters } from 'libs/shared/apps/search/interfaces';\nimport { DraftState, FilterContext, FilterStateHash } from 'libs/shared/apps/search/reducers';\nimport { FilterHelper } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { StateHelper } from 'libs/shared/utils/StateHelper';\n\nimport styles from './filter-button.scss';\n\nfunction getTotalActiveFilters(currentState: FilterStateHash): number {\n const total = Object.keys(currentState).reduce((acc: number, key: FilterIds) => {\n return currentState[key].active\n ? acc + 1\n : acc;\n }, 0);\n\n return total;\n}\n\ninterface MoreFiltersButtonProps {\n filter: MoreFilters;\n}\n\nexport function MoreFiltersButton(props: MoreFiltersButtonProps): JSX.Element {\n const { state } = React.useContext(FilterContext);\n const currentFilterState = state.moreFilters;\n\n const [ label, setLabel ] = React.useState(props.filter.name);\n const [ showDropdown, setShowDropdown ] = React.useState(false);\n const [ draftState, setDraftState ] = React.useState<DraftState>(currentFilterState);\n const [ totalActiveFilters, setTotalActiveFilters ] = React.useState(getTotalActiveFilters(currentFilterState));\n\n const currentFilterStateKey = Object.keys(currentFilterState).map((id: FilterIds) => {\n return `${id}:${currentFilterState[id].active}`;\n }).join('-');\n\n React.useEffect(() => {\n setDraftState(currentFilterState);\n setTotalActiveFilters(getTotalActiveFilters(currentFilterState));\n }, [ props.filter, currentFilterStateKey ]);\n\n React.useEffect(() => {\n setLabel(totalActiveFilters ? `${props.filter.name} - ${totalActiveFilters}` : props.filter.name);\n }, [totalActiveFilters]);\n\n function onClickReset(): void {\n const filterIds = Object.keys(currentFilterState) as FilterIds[];\n\n const newState = filterIds.reduce((acc: DraftState, filterId) => {\n const filter = props.filter.filters.find(f => f.id === filterId);\n const defaultOption = filter.options?.find(o => o.default);\n\n acc[filterId] = {\n active: false,\n selection: defaultOption ? [defaultOption] : []\n };\n\n return acc;\n }, {});\n\n setDraftState(newState);\n }\n\n function onClickApply(): void {\n applyFilter();\n setShowDropdown(false);\n }\n\n function onToggleDropdown(isShowing: boolean): void {\n setShowDropdown(isShowing);\n\n if (isShowing)\n return;\n\n // Apply the filter if the dropdown has been closed\n applyFilter();\n }\n\n function applyFilter(): void {\n FilterHelper.applyFilter(\n props.filter.filters,\n currentFilterState,\n draftState,\n state.appLink\n );\n }\n\n const baseClass = `fw-semibold ${styles.hideCaret} mx-1 btn`;\n\n return (\n <Dropdown onToggle={onToggleDropdown} show={showDropdown}>\n <Dropdown.Toggle id={props.filter.id} className={baseClass} variant={totalActiveFilters ? 'dark' : 'outline-dark'}>\n {label}\n </Dropdown.Toggle>\n\n <Dropdown.Menu onClick={(e: React.MouseEvent) => e.stopPropagation()}>\n <div className={`mx-1 ${styles.moreFiltersWidth} ${props.filter.type !== 'dropdown' ? 'px-2 py-1' : ''}`}>\n {props.filter.filters.map(filter => {\n const FilterComponent = filter.customComponent\n ? filter.customComponent\n : FilterHelper.mapTypeToComponent(filter.type);\n\n return (\n <fieldset key={filter.id}>\n <FilterComponent\n filter={filter}\n draftState={draftState[filter.id]}\n setDraftState={StateHelper.getSetStateByKey(setDraftState, filter.id)}\n isOnMoreFilters\n />\n </fieldset>\n );\n })}\n\n <FilterActions\n active={!!Object.keys(draftState).find((key: FilterIds) => draftState[key].active)}\n onClickReset={onClickReset}\n onClickApply={onClickApply}\n />\n </div>\n </Dropdown.Menu>\n </Dropdown>\n );\n}","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}> </span>\n </div>\n );\n});","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { FilterOption } from 'libs/shared/apps/search/interfaces';\nimport { TagItem } from 'libs/shared/components/tags/TagItem';\nimport { BaseObject, Tag } from 'libs/shared/interfaces';\n\nexport interface TagWidgetItemProps {\n appLink: Core.AppLink;\n data: Tag;\n selectedItems?: BaseObject[];\n onClick?: (data: Tag | FilterOption) => void;\n}\n\nexport function TagWidgetItem(props: TagWidgetItemProps): JSX.Element {\n const isSelected = props.selectedItems.find(selection => selection.id === props.data.id);\n\n const colorClass = isSelected ? `bg-gray-900 text-white` : 'bg-light';\n\n return (\n <TagItem\n tag={props.data}\n appLink={props.appLink}\n tagClass={`no-decoration ${colorClass} lh-1`}\n onClick={() => props.onClick(props.data)}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"tagItem\":\"j84HW\"};","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FilterOption, SearchFilter } from 'libs/shared/apps/search/interfaces';\nimport { FilterContext, FilterState } from 'libs/shared/apps/search/reducers';\nimport { FilterHelper } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget/DynamicWidget';\nimport { TagWidgetItem, TagWidgetItemProps } from 'libs/shared/components/widgets/items/tag-widget-item/TagWidgetItem';\n\nimport styles from './tag-filter.scss';\n\ninterface TagFilterProps {\n filter: SearchFilter;\n queryParams: HashObject;\n isFetching?: boolean;\n}\n\nexport function TagFilter(props: TagFilterProps): JSX.Element {\n const { state } = React.useContext(FilterContext);\n\n if (!props.filter?.id)\n return <></>;\n\n const currentFilterState = state[props.filter.id];\n\n const { selection: selections } = currentFilterState;\n\n const unappliedOptions = props.filter?.options?.filter(opt => {\n return !selections?.find(selection => selection.id === opt.id);\n }) ?? [];\n\n function onClickOption(option: FilterOption): void {\n let nextFilterState: FilterState = null;\n\n let indexOfItem: number = -1;\n\n // Find the index of the selected item if it's already selected\n selections.find((selection, i) => {\n if (indexOfItem > -1)\n return;\n\n if (selection.id.toString() !== option.id.toString())\n return;\n\n indexOfItem = i;\n });\n\n if (indexOfItem >= 0) {\n const newItems = [ ...selections.slice(0, indexOfItem), ...selections.slice(indexOfItem + 1) ];\n \n nextFilterState = {\n active: !!newItems.length,\n selection: newItems\n };\n } else {\n nextFilterState = {\n active: true,\n selection: selections.concat(option)\n };\n }\n\n FilterHelper.applyFilter(\n [props.filter],\n currentFilterState,\n { [props.filter.id]: nextFilterState },\n state.appLink\n );\n }\n\n function getContainerClass(): string {\n let className = 'mb-3';\n\n if (collection.length && props.isFetching)\n className += ' mt-n1';\n else if (!collection.length && !props.isFetching)\n className += ' d-none';\n\n return className;\n }\n\n const collection = [ ...selections, ...(props.isFetching ? [] : unappliedOptions) ];\n\n return (\n <div className={(props.isFetching || collection.length) ? 'py-2' : ''}>\n <div className={getContainerClass()}>\n {(!!collection.length || props.isFetching) && (\n <DynamicWidget\n collection={collection}\n childComponent={(props: TagWidgetItemProps) => (\n <TagWidgetItem\n {...props}\n selectedItems={selections}\n onClick={onClickOption}\n />\n )}\n staticChildren={props.isFetching\n ? new Array(3).fill({\n component: () => <PartialTagItem tagClass={styles.tagItem} />,\n position: 'end'\n })\n : []\n }\n partialLoadingComponent={() => (\n <div className='me-2'>\n <PartialTagItem tagClass={`${styles.tagItem}`} />\n </div>\n )}\n />\n )}\n </div>\n </div>\n );\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { MoreFilters, SearchFilter } from 'libs/shared/apps/search/interfaces';\nimport { FilterContext } from 'libs/shared/apps/search/reducers';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\n\ntype ResetButtonProps = PropsWithAnalyticsOptions<{\n currentQueryParam: string;\n mainFilters: Array<SearchFilter>;\n moreFilters: MoreFilters;\n alignLeft?: boolean;\n}>;\n\nexport function ResetButton(props: ResetButtonProps): JSX.Element {\n const { state } = React.useContext(FilterContext);\n\n const onClickReset = () => {\n Core.AppLinkHelper.trigger({\n ...state.appLink,\n params: props.currentQueryParam ? { query: props.currentQueryParam } : null\n });\n };\n\n return (\n <DivButton\n onClick={onClickReset}\n className={`${props.alignLeft ? 'order-first' : ''} hover-text-underline cursor-pointer d-flex align-items-center mx-2`}\n >\n <Text namespace='search.resetButton' phrase='reset' />\n </DivButton>\n );\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { FilterButton } from 'libs/shared/apps/search/components/filter-button/FilterButton';\nimport { MoreFiltersButton } from 'libs/shared/apps/search/components/filter-button/MoreFiltersButton';\nimport { TagFilter } from 'libs/shared/apps/search/components/filter-types/tag-filter/TagFilter';\nimport { ResetButton } from 'libs/shared/apps/search/components/reset-button/ResetButton';\nimport { MoreFilters, SearchFilter, SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { FilterContext, FilterReducer } from 'libs/shared/apps/search/reducers';\nimport { FilterHelper } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport styles from './search-filters.scss';\n\ntype SearchFiltersProps = {\n queryParams: HashObject;\n mainFilters: SearchFilter[];\n appLink: Core.AppLink;\n moreFilters?: MoreFilters;\n isFetchingOptions?: boolean;\n constantIndices?: SearchIndices[];\n analyticsOptions?: AnalyticsOptions;\n\n hideHeading?: boolean;\n hideDivider?: boolean;\n hideResetButton?: boolean;\n alignResetButtonLeft?: boolean;\n hideCaret?: boolean;\n\n /**\n * Incremental changes flag for new search\n */\n _hasNewSearch?: boolean;\n};\n\nexport function SearchFilters(props: SearchFiltersProps): JSX.Element {\n const { queryParams, appLink, hideHeading, isFetchingOptions, constantIndices = []} = props;\n\n const newState = React.useMemo(() => {\n return FilterHelper.deriveInitialStateFromQuery(queryParams, props.mainFilters, props.moreFilters, appLink);\n }, [ queryParams, isFetchingOptions ]);\n\n const [ state, dispatch ] = React.useReducer(FilterReducer, newState);\n\n React.useEffect(() => {\n if (ObjectHelper.isEqual(newState, state))\n return;\n\n dispatch({\n type: 'update',\n payload: newState\n });\n\n if (props.analyticsOptions) {\n FilterHelper.logFilterEvent(\n props.mainFilters,\n props.moreFilters,\n newState,\n queryParams.query,\n props.analyticsOptions\n );\n }\n }, [newState]);\n\n const indices = ArrayHelper.uniq([\n ...FilterHelper.getAppliedIndices(queryParams, props._hasNewSearch),\n ...constantIndices\n ]);\n\n const { mainFilters, moreFilters } = FilterHelper.mixinDisabledFields(\n state,\n indices,\n props.mainFilters,\n props.moreFilters\n );\n\n // Separate the tag filter as it's rendered differently\n const mainFiltersWithoutTags = mainFilters.filter(f => f.type !== 'tag');\n const tagFilter = mainFilters.find(f => f.type === 'tag');\n\n return (\n <FilterContext.Provider value={{ state, dispatch }}>\n <LanguageNamespaceContext.Provider value='search.searchFilters'>\n <section>\n <div className={`d-flex ${!props.hideDivider ? 'border-bottom pb-3 mb-3' : ''}`}>\n {!hideHeading && (\n <h2 className='h5 mb-0 d-inline-block pe-2 border-end d-flex align-items-center'>\n <Text phrase='heading' />\n </h2>\n )}\n\n <div className={`d-flex flex-wrap ${styles.filtersContainer} ${!hideHeading ? 'ms-2' : ''}`}>\n {mainFiltersWithoutTags.map(f => (\n <FilterButton key={f.id} filter={f} hideCaret={props.hideCaret} />\n ))}\n\n {moreFilters && <MoreFiltersButton filter={moreFilters} />}\n\n {FilterHelper.hasActiveFilters(queryParams) && !props.hideResetButton && (\n <ResetButton\n mainFilters={props.mainFilters}\n moreFilters={props.moreFilters}\n currentQueryParam={queryParams.query}\n analyticsOptions={props.analyticsOptions}\n alignLeft={props.alignResetButtonLeft}\n />\n )}\n </div>\n </div>\n \n <TagFilter\n filter={tagFilter}\n queryParams={queryParams}\n isFetching={props.isFetchingOptions}\n />\n </section>\n </LanguageNamespaceContext.Provider>\n </FilterContext.Provider>\n );\n}\n","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialFilterHeading\":\"O8f8H\",\"partialButton\":\"ThKam\",\"filtersContainer\":\"JIp3h\"};"],"names":["namespace","FilterActions","props","className","active","DivButton","onClick","onClickReset","Text","phrase","onClickApply","defaultProps","FilterButton","state","currentFilterState","filter","id","isDropdownFilter","type","name","label","setLabel","showDropdown","setShowDropdown","draftState","setDraftState","onSelectItem","applyFilter","newState","FilterHelper","appLink","selection","FilterComponent","customComponent","caretClass","hideCaret","customWidthClass","Dropdown","onToggle","isShowing","show","variant","disabled","icon","SvgContainer","svgName","labelPrefix","defaultOption","options","find","o","StateHelper","getSetStateByKey","setState","key","callback","data","fn","FunctionHelper","getTotalActiveFilters","currentState","Object","keys","reduce","acc","MoreFiltersButton","moreFilters","totalActiveFilters","setTotalActiveFilters","currentFilterStateKey","map","join","filters","baseClass","e","stopPropagation","isOnMoreFilters","filterId","f","PartialTagItem","tagClass","classNames","TagWidgetItem","colorClass","selectedItems","TagItem","tag","TagFilter","selections","unappliedOptions","opt","onClickOption","option","nextFilterState","indexOfItem","i","toString","newItems","slice","length","concat","collection","isFetching","DynamicWidget","childComponent","staticChildren","Array","fill","component","position","partialLoadingComponent","ResetButton","params","currentQueryParam","query","alignLeft","SearchFilters","queryParams","hideHeading","isFetchingOptions","constantIndices","mainFilters","dispatch","ObjectHelper","payload","analyticsOptions","indices","ArrayHelper","_hasNewSearch","mainFiltersWithoutTags","tagFilter","value","hideDivider","hideResetButton","alignResetButtonLeft","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/5634-902d60b98b-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/search/components/filter-actions/FilterActions.tsx","file:///app/packages/libs/shared/src/apps/search/components/filter-button/filter-button.scss","file:///app/packages/libs/shared/src/apps/search/components/filter-button/FilterButton.tsx","file:///app/packages/libs/shared/src/utils/StateHelper.ts","file:///app/packages/libs/shared/src/apps/search/components/filter-button/MoreFiltersButton.tsx","file:///app/packages/libs/shared/src/components/tags/PartialTagItem.tsx","file:///app/packages/libs/shared/src/components/widgets/items/tag-widget-item/TagWidgetItem.tsx","file:///app/packages/libs/shared/src/apps/search/components/filter-types/tag-filter/tag-filter.scss","file:///app/packages/libs/shared/src/apps/search/components/filter-types/tag-filter/TagFilter.tsx","file:///app/packages/libs/shared/src/apps/search/components/reset-button/ResetButton.tsx","file:///app/packages/libs/shared/src/apps/search/components/search-filters/SearchFilters.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/apps/search/components/search-filters/search-filters.scss"],"sourcesContent":["import * as React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'search.filterActions';\n\ninterface FilterActionsProps {\n className?: string;\n onClickReset: () => void;\n onClickApply: () => void;\n active: boolean;\n}\n\nFilterActions.defaultProps = {\n active: false,\n className: ''\n};\n\nexport function FilterActions(props: FilterActionsProps): JSX.Element {\n return (\n <div className={`d-flex justify-content-between ${props.className}`}>\n {props.active ? (\n <DivButton className='text-secondary hover-text-underline cursor-pointer' onClick={props.onClickReset}>\n <Text namespace={namespace} phrase='reset' />\n </DivButton>\n ) : (\n <div className='invisible' />\n )}\n\n <DivButton className='info-link' onClick={props.onClickApply}>\n <Text namespace={namespace} phrase='apply' />\n </DivButton>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"hideCaret\":\"KDq7l\",\"filterMenu\":\"E9o_Q\",\"twoColumnsWidth\":\"C70vU\",\"nestedCheckboxesWidth\":\"kUHcg\",\"switchWidth\":\"bi1FH\",\"moreFiltersWidth\":\"rbr22\",\"svgContainer\":\"UwDMA\"};","import * as React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { FilterActions } from 'libs/shared/apps/search/components/filter-actions/FilterActions';\nimport { SearchFilter } from 'libs/shared/apps/search/interfaces';\nimport { FilterContext, FilterState } from 'libs/shared/apps/search/reducers';\nimport { FilterHelper } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\n\nimport styles from './filter-button.scss';\n\n/**\n * If your filter requires some customisations to the default width, add a use case here.\n */\nfunction getCustomWidthClass(filter: SearchFilter): string {\n if (FilterHelper.displayTwoColumns(filter))\n return styles.twoColumnsWidth;\n\n // Some classifications has long names, so we make them wider\n if (filter.id === 'classification')\n return styles.classificationWidth;\n \n if (FilterHelper.displayTwoLayers(filter))\n return styles.nestedCheckboxesWidth;\n\n if (filter.type === 'switch')\n return styles.switchWidth;\n\n return '';\n}\n\nFilterButton.defaultProps = {\n hideCaret: true\n};\n\ninterface FilterButtonProps {\n filter: SearchFilter;\n hideCaret?: boolean;\n}\n\nexport function FilterButton(props: FilterButtonProps): JSX.Element {\n const { state } = React.useContext(FilterContext);\n const currentFilterState = state[props.filter.id];\n\n const isDropdownFilter = props.filter.type === 'dropdown';\n\n const [ label, setLabel ] = React.useState(props.filter.name);\n const [ showDropdown, setShowDropdown ] = React.useState(false);\n const [ draftState, setDraftState ] = React.useState<FilterState>(currentFilterState);\n\n React.useEffect(() => {\n setLabel(FilterHelper.getLabel(props.filter, currentFilterState));\n setDraftState(currentFilterState);\n }, [ props.filter, currentFilterState?.selection ]);\n\n function onSelectItem(state: FilterState): void {\n setDraftState(state);\n\n if (isDropdownFilter)\n applyFilter(state);\n }\n\n function onClickReset(): void {\n const defaultOption = props.filter.options?.find(o => o.default);\n\n setDraftState({\n active: false,\n selection: defaultOption ? [defaultOption] : []\n });\n }\n\n function onClickApply(): void {\n applyFilter();\n setShowDropdown(false);\n }\n\n function applyFilter(newState: FilterState = draftState): void {\n FilterHelper.applyFilter(\n [props.filter],\n currentFilterState,\n { [props.filter.id]: newState },\n state.appLink\n );\n }\n\n function onToggleDropdown(isShowing: boolean): void {\n setShowDropdown(isShowing);\n\n if (isShowing || isDropdownFilter)\n return;\n\n // Apply the filter if the dropdown has been closed\n applyFilter();\n }\n\n const FilterComponent = React.useMemo(() => {\n return props.filter.customComponent\n ? props.filter.customComponent\n : FilterHelper.mapTypeToComponent(props.filter.type);\n }, [props.filter.type]);\n\n const baseClass = `fw-semibold mx-1 btn d-flex align-items-center`;\n const caretClass = props.hideCaret && !isDropdownFilter ? styles.hideCaret : '';\n const customWidthClass = getCustomWidthClass(props.filter);\n\n if (props.filter.type === 'button')\n return (\n <FilterComponent\n filter={props.filter}\n draftState={draftState}\n setDraftState={onSelectItem}\n />\n );\n\n return (\n <Dropdown onToggle={onToggleDropdown} show={showDropdown}>\n <Dropdown.Toggle\n id={`filterButton-${props.filter.id}`}\n className={`${baseClass} ${caretClass}`}\n variant={(currentFilterState.active && !isDropdownFilter) ? 'dark' : 'outline-dark'}\n disabled={props.filter.disabled}\n >\n {!!props.filter.icon && (\n <div className={styles.svgContainer}>\n <SvgContainer svgName={props.filter.icon} />\n </div>\n )}\n {props.filter.labelPrefix} {label}\n </Dropdown.Toggle>\n\n <Dropdown.Menu>\n <div className={`mx-1 ${styles.filterMenu} ${customWidthClass} ${!isDropdownFilter ? 'px-2 py-1' : ''}`}>\n <FilterComponent\n filter={props.filter}\n draftState={draftState}\n setDraftState={onSelectItem}\n />\n\n {(!isDropdownFilter && !props.filter.disabled) && (\n <FilterActions\n active={draftState.active}\n onClickReset={onClickReset}\n onClickApply={onClickApply}\n />\n )}\n </div>\n </Dropdown.Menu>\n </Dropdown>\n );\n}\n","import { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nexport const StateHelper = {\n /**\n * Helper function to get the setState function for an individual key in a state object.\n * \n * @param setState React setState action\n * @param key Property within the state object we're updating\n * @param callback Optional callback to modify data before setting state. Uses identity fn by default.\n * \n * @returns Newly updated state object\n */\n getSetStateByKey<T extends HashObject>(\n setState: React.Dispatch<React.SetStateAction<T>>,\n key: keyof T,\n callback?: (data: any, state?: T) => T[keyof T]\n ): (data: any) => void {\n return (data: any) => setState(state => {\n const fn = FunctionHelper.isFunction(callback) ? callback : FunctionHelper.useIdentity<T>();\n return { ...state, [key]: fn(data, state) };\n });\n }\n};","import * as React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { FilterActions } from 'libs/shared/apps/search/components/filter-actions/FilterActions';\nimport { FilterIds, MoreFilters } from 'libs/shared/apps/search/interfaces';\nimport { DraftState, FilterContext, FilterStateHash } from 'libs/shared/apps/search/reducers';\nimport { FilterHelper } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { StateHelper } from 'libs/shared/utils/StateHelper';\n\nimport styles from './filter-button.scss';\n\nfunction getTotalActiveFilters(currentState: FilterStateHash): number {\n const total = Object.keys(currentState).reduce((acc: number, key: FilterIds) => {\n return currentState[key].active\n ? acc + 1\n : acc;\n }, 0);\n\n return total;\n}\n\ninterface MoreFiltersButtonProps {\n filter: MoreFilters;\n}\n\nexport function MoreFiltersButton(props: MoreFiltersButtonProps): JSX.Element {\n const { state } = React.useContext(FilterContext);\n const currentFilterState = state.moreFilters;\n\n const [ label, setLabel ] = React.useState(props.filter.name);\n const [ showDropdown, setShowDropdown ] = React.useState(false);\n const [ draftState, setDraftState ] = React.useState<DraftState>(currentFilterState);\n const [ totalActiveFilters, setTotalActiveFilters ] = React.useState(getTotalActiveFilters(currentFilterState));\n\n const currentFilterStateKey = Object.keys(currentFilterState).map((id: FilterIds) => {\n return `${id}:${currentFilterState[id].active}`;\n }).join('-');\n\n React.useEffect(() => {\n setDraftState(currentFilterState);\n setTotalActiveFilters(getTotalActiveFilters(currentFilterState));\n }, [ props.filter, currentFilterStateKey ]);\n\n React.useEffect(() => {\n setLabel(totalActiveFilters ? `${props.filter.name} - ${totalActiveFilters}` : props.filter.name);\n }, [totalActiveFilters]);\n\n function onClickReset(): void {\n const filterIds = Object.keys(currentFilterState) as FilterIds[];\n\n const newState = filterIds.reduce((acc: DraftState, filterId) => {\n const filter = props.filter.filters.find(f => f.id === filterId);\n const defaultOption = filter.options?.find(o => o.default);\n\n acc[filterId] = {\n active: false,\n selection: defaultOption ? [defaultOption] : []\n };\n\n return acc;\n }, {});\n\n setDraftState(newState);\n }\n\n function onClickApply(): void {\n applyFilter();\n setShowDropdown(false);\n }\n\n function onToggleDropdown(isShowing: boolean): void {\n setShowDropdown(isShowing);\n\n if (isShowing)\n return;\n\n // Apply the filter if the dropdown has been closed\n applyFilter();\n }\n\n function applyFilter(): void {\n FilterHelper.applyFilter(\n props.filter.filters,\n currentFilterState,\n draftState,\n state.appLink\n );\n }\n\n const baseClass = `fw-semibold ${styles.hideCaret} mx-1 btn`;\n\n return (\n <Dropdown onToggle={onToggleDropdown} show={showDropdown}>\n <Dropdown.Toggle id={props.filter.id} className={baseClass} variant={totalActiveFilters ? 'dark' : 'outline-dark'}>\n {label}\n </Dropdown.Toggle>\n\n <Dropdown.Menu onClick={(e: React.MouseEvent) => e.stopPropagation()}>\n <div className={`mx-1 ${styles.moreFiltersWidth} ${props.filter.type !== 'dropdown' ? 'px-2 py-1' : ''}`}>\n {props.filter.filters.map(filter => {\n const FilterComponent = filter.customComponent\n ? filter.customComponent\n : FilterHelper.mapTypeToComponent(filter.type);\n\n return (\n <fieldset key={filter.id}>\n <FilterComponent\n filter={filter}\n draftState={draftState[filter.id]}\n setDraftState={StateHelper.getSetStateByKey(setDraftState, filter.id)}\n isOnMoreFilters\n />\n </fieldset>\n );\n })}\n\n <FilterActions\n active={!!Object.keys(draftState).find((key: FilterIds) => draftState[key].active)}\n onClickReset={onClickReset}\n onClickApply={onClickApply}\n />\n </div>\n </Dropdown.Menu>\n </Dropdown>\n );\n}","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}> </span>\n </div>\n );\n});","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { FilterOption } from 'libs/shared/apps/search/interfaces';\nimport { TagItem } from 'libs/shared/components/tags/TagItem';\nimport { BaseObject, Tag } from 'libs/shared/interfaces';\n\nexport interface TagWidgetItemProps {\n appLink: Core.AppLink;\n data: Tag;\n selectedItems?: BaseObject[];\n onClick?: (data: Tag | FilterOption) => void;\n}\n\nexport function TagWidgetItem(props: TagWidgetItemProps): JSX.Element {\n const isSelected = props.selectedItems.find(selection => selection.id === props.data.id);\n\n const colorClass = isSelected ? `bg-gray-900 text-white` : 'bg-light';\n\n return (\n <TagItem\n tag={props.data}\n appLink={props.appLink}\n tagClass={`no-decoration ${colorClass} lh-1`}\n onClick={() => props.onClick(props.data)}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"tagItem\":\"j84HW\"};","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FilterOption, SearchFilter } from 'libs/shared/apps/search/interfaces';\nimport { FilterContext, FilterState } from 'libs/shared/apps/search/reducers';\nimport { FilterHelper } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget/DynamicWidget';\nimport { TagWidgetItem, TagWidgetItemProps } from 'libs/shared/components/widgets/items/tag-widget-item/TagWidgetItem';\n\nimport styles from './tag-filter.scss';\n\ninterface TagFilterProps {\n filter: SearchFilter;\n queryParams: HashObject;\n isFetching?: boolean;\n}\n\nexport function TagFilter(props: TagFilterProps): JSX.Element {\n const { state } = React.useContext(FilterContext);\n\n if (!props.filter?.id)\n return <></>;\n\n const currentFilterState = state[props.filter.id];\n\n const { selection: selections } = currentFilterState;\n\n const unappliedOptions = props.filter?.options?.filter(opt => {\n return !selections?.find(selection => selection.id === opt.id);\n }) ?? [];\n\n function onClickOption(option: FilterOption): void {\n let nextFilterState: FilterState = null;\n\n let indexOfItem: number = -1;\n\n // Find the index of the selected item if it's already selected\n selections.find((selection, i) => {\n if (indexOfItem > -1)\n return;\n\n if (selection.id.toString() !== option.id.toString())\n return;\n\n indexOfItem = i;\n });\n\n if (indexOfItem >= 0) {\n const newItems = [ ...selections.slice(0, indexOfItem), ...selections.slice(indexOfItem + 1) ];\n \n nextFilterState = {\n active: !!newItems.length,\n selection: newItems\n };\n } else {\n nextFilterState = {\n active: true,\n selection: selections.concat(option)\n };\n }\n\n FilterHelper.applyFilter(\n [props.filter],\n currentFilterState,\n { [props.filter.id]: nextFilterState },\n state.appLink\n );\n }\n\n function getContainerClass(): string {\n let className = 'mb-3';\n\n if (collection.length && props.isFetching)\n className += ' mt-n1';\n else if (!collection.length && !props.isFetching)\n className += ' d-none';\n\n return className;\n }\n\n const collection = [ ...selections, ...(props.isFetching ? [] : unappliedOptions) ];\n\n return (\n <div className={(props.isFetching || collection.length) ? 'py-2' : ''}>\n <div className={getContainerClass()}>\n {(!!collection.length || props.isFetching) && (\n <DynamicWidget\n collection={collection}\n childComponent={(props: TagWidgetItemProps) => (\n <TagWidgetItem\n {...props}\n selectedItems={selections}\n onClick={onClickOption}\n />\n )}\n staticChildren={props.isFetching\n ? new Array(3).fill({\n component: () => <PartialTagItem tagClass={styles.tagItem} />,\n position: 'end'\n })\n : []\n }\n partialLoadingComponent={() => (\n <div className='me-2'>\n <PartialTagItem tagClass={`${styles.tagItem}`} />\n </div>\n )}\n />\n )}\n </div>\n </div>\n );\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { MoreFilters, SearchFilter } from 'libs/shared/apps/search/interfaces';\nimport { FilterContext } from 'libs/shared/apps/search/reducers';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\n\ntype ResetButtonProps = PropsWithAnalyticsOptions<{\n currentQueryParam: string;\n mainFilters: Array<SearchFilter>;\n moreFilters: MoreFilters;\n alignLeft?: boolean;\n}>;\n\nexport function ResetButton(props: ResetButtonProps): JSX.Element {\n const { state } = React.useContext(FilterContext);\n\n const onClickReset = () => {\n Core.AppLinkHelper.trigger({\n ...state.appLink,\n params: props.currentQueryParam ? { query: props.currentQueryParam } : null\n });\n };\n\n return (\n <DivButton\n onClick={onClickReset}\n className={`${props.alignLeft ? 'order-first' : ''} hover-text-underline cursor-pointer d-flex align-items-center mx-2`}\n >\n <Text namespace='search.resetButton' phrase='reset' />\n </DivButton>\n );\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { FilterButton } from 'libs/shared/apps/search/components/filter-button/FilterButton';\nimport { MoreFiltersButton } from 'libs/shared/apps/search/components/filter-button/MoreFiltersButton';\nimport { TagFilter } from 'libs/shared/apps/search/components/filter-types/tag-filter/TagFilter';\nimport { ResetButton } from 'libs/shared/apps/search/components/reset-button/ResetButton';\nimport { MoreFilters, SearchFilter, SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { FilterContext, FilterReducer } from 'libs/shared/apps/search/reducers';\nimport { FilterHelper } from 'libs/shared/apps/search/utils/FilterHelper';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport styles from './search-filters.scss';\n\ntype SearchFiltersProps = {\n queryParams: HashObject;\n mainFilters: SearchFilter[];\n appLink: Core.AppLink;\n moreFilters?: MoreFilters;\n isFetchingOptions?: boolean;\n constantIndices?: SearchIndices[];\n analyticsOptions?: AnalyticsOptions;\n\n hideHeading?: boolean;\n hideDivider?: boolean;\n hideResetButton?: boolean;\n alignResetButtonLeft?: boolean;\n hideCaret?: boolean;\n\n /**\n * Incremental changes flag for new search\n */\n _hasNewSearch?: boolean;\n};\n\nexport function SearchFilters(props: SearchFiltersProps): JSX.Element {\n const { queryParams, appLink, hideHeading, isFetchingOptions, constantIndices = []} = props;\n\n const newState = React.useMemo(() => {\n return FilterHelper.deriveInitialStateFromQuery(queryParams, props.mainFilters, props.moreFilters, appLink);\n }, [ queryParams, isFetchingOptions ]);\n\n const [ state, dispatch ] = React.useReducer(FilterReducer, newState);\n\n React.useEffect(() => {\n if (ObjectHelper.isEqual(newState, state))\n return;\n\n dispatch({\n type: 'update',\n payload: newState\n });\n\n if (props.analyticsOptions) {\n FilterHelper.logFilterEvent(\n props.mainFilters,\n props.moreFilters,\n newState,\n queryParams.query,\n props.analyticsOptions\n );\n }\n }, [newState]);\n\n const indices = ArrayHelper.uniq([\n ...FilterHelper.getAppliedIndices(queryParams, props._hasNewSearch),\n ...constantIndices\n ]);\n\n const { mainFilters, moreFilters } = FilterHelper.mixinDisabledFields(\n state,\n indices,\n props.mainFilters,\n props.moreFilters\n );\n\n // Separate the tag filter as it's rendered differently\n const mainFiltersWithoutTags = mainFilters.filter(f => f.type !== 'tag');\n const tagFilter = mainFilters.find(f => f.type === 'tag');\n\n return (\n <FilterContext.Provider value={{ state, dispatch }}>\n <LanguageNamespaceContext.Provider value='search.searchFilters'>\n <section>\n <div className={`d-flex ${!props.hideDivider ? 'border-bottom pb-3 mb-3' : ''}`}>\n {!hideHeading && (\n <h2 className='h5 mb-0 d-inline-block pe-2 border-end d-flex align-items-center'>\n <Text phrase='heading' />\n </h2>\n )}\n\n <div className={`d-flex flex-wrap ${styles.filtersContainer} ${!hideHeading ? 'ms-2' : ''}`}>\n {mainFiltersWithoutTags.map(f => (\n <FilterButton key={f.id} filter={f} hideCaret={props.hideCaret} />\n ))}\n\n {moreFilters && <MoreFiltersButton filter={moreFilters} />}\n\n {FilterHelper.hasActiveFilters(queryParams) && !props.hideResetButton && (\n <ResetButton\n mainFilters={props.mainFilters}\n moreFilters={props.moreFilters}\n currentQueryParam={queryParams.query}\n analyticsOptions={props.analyticsOptions}\n alignLeft={props.alignResetButtonLeft}\n />\n )}\n </div>\n </div>\n \n <TagFilter\n filter={tagFilter}\n queryParams={queryParams}\n isFetching={props.isFetchingOptions}\n />\n </section>\n </LanguageNamespaceContext.Provider>\n </FilterContext.Provider>\n );\n}\n","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialFilterHeading\":\"O8f8H\",\"partialButton\":\"ThKam\",\"filtersContainer\":\"JIp3h\"};"],"names":["namespace","FilterActions","props","className","active","DivButton","onClick","onClickReset","Text","phrase","onClickApply","defaultProps","FilterButton","state","currentFilterState","filter","id","isDropdownFilter","type","name","label","setLabel","showDropdown","setShowDropdown","draftState","setDraftState","onSelectItem","applyFilter","newState","FilterHelper","appLink","selection","FilterComponent","customComponent","caretClass","hideCaret","customWidthClass","Dropdown","onToggle","isShowing","show","variant","disabled","icon","SvgContainer","svgName","labelPrefix","defaultOption","options","find","o","StateHelper","getSetStateByKey","setState","key","callback","data","fn","FunctionHelper","getTotalActiveFilters","currentState","Object","keys","reduce","acc","MoreFiltersButton","moreFilters","totalActiveFilters","setTotalActiveFilters","currentFilterStateKey","map","join","filters","baseClass","e","stopPropagation","isOnMoreFilters","filterId","f","PartialTagItem","tagClass","classNames","TagWidgetItem","colorClass","selectedItems","TagItem","tag","TagFilter","selections","unappliedOptions","opt","onClickOption","option","nextFilterState","indexOfItem","i","toString","newItems","slice","length","concat","collection","isFetching","DynamicWidget","childComponent","staticChildren","Array","fill","component","position","partialLoadingComponent","ResetButton","params","currentQueryParam","query","alignLeft","SearchFilters","queryParams","hideHeading","isFetchingOptions","constantIndices","mainFilters","dispatch","ObjectHelper","payload","analyticsOptions","indices","ArrayHelper","_hasNewSearch","mainFiltersWithoutTags","tagFilter","value","hideDivider","hideResetButton","alignResetButtonLeft","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7309],{8484:(e,t,n)=>{n.d(t,{Z:()=>y});var a=n(32735),r=n(42648),i=n(11607),c=n(83914),l=n(83345),o=n(28972),s=n(38129),m=n(93264),u=n(35223),d=n(86572);const p={timeTag:"ShZvf",hide:"FHzDr",time:"JDp5N",type:"AzIWg",question:"UhEYq",deleteContainer:"wBqoo",delete:"OAQQu",correctness:"W5sR9",selected:"tfrDf",row:"sGk59"};var v="shared.interactiveQuestions";function g(e){var t=e.interaction;switch((0,e.getCorrectness)(t)){case o.w.Correct:return a.createElement("span",{className:"text-success"},a.createElement(c.x,{size:c.S.Medium,svgName:u.vn.Check}));case o.w.Incorrect:return a.createElement("span",{className:"text-danger"},a.createElement(c.x,{size:c.S.Medium,svgName:u.vn.Close}));case o.w.AwaitingMarking:return a.createElement("span",{className:"text-secondary italic"},a.createElement("i",null,a.createElement(l.x,{namespace:v,phrase:"pending"})));case o.w.UnAnswered:return a.createElement("button",{className:"btn btn-outline-dark"},a.createElement(l.x,{namespace:v,phrase:"answer"}));case o.w.Answered:return a.createElement("span",{className:"text-secondary italic"},a.createElement("i",null,a.createElement(l.x,{namespace:v,phrase:"answered"})));case o.w.NotApplicable:return a.createElement(a.Fragment,null)}}function f(e){var t=e.interaction,n=e.visibleAt,r=e.selectedInteractionId,l=e.goToTimepoint,o=e.scrollTo,s=e.isFirstInteraction,v=t.id.toString()===(null==r?void 0:r.toString()),f=a.useRef(null);a.useEffect((function(){if(v&&f.current){var e=f.current,t=e.getBoundingClientRect(),n=t.top-e.offsetParent.getBoundingClientRect().top;o(n,t.height)}}),[v]);var E=l?"cursor-pointer":"cursor-default";return a.createElement("div",{ref:f},a.createElement(i.L,{className:"py-2 ".concat(E," ").concat(p.row," ").concat(v?p.selected:""),onClick:v?function(){}:function(){l&&l(t.id)}},a.createElement("div",{className:"me-3 d-inline-flex rounded-pill justify-content-center align-items-center text-info fw-semibold bg-light-blue ".concat(p.timeTag," ").concat(s?"":p.hide)},s?m.T.ToDisplayDuration(n):""),a.createElement(d.y,{interaction:t,showTypeName:!0,typeNameClassName:p.type,questionClassName:p.question}),e.onClickDelete&&a.createElement(i.L,{onClick:function(n){n.stopPropagation(),e.onClickDelete(t.id)},className:"".concat(p.deleteContainer)},a.createElement("span",{className:"text-end ".concat(p.delete)},a.createElement(c.x,{size:c.S.Medium,svgName:u.vn.Delete}))),e.getCorrectness&&a.createElement("span",{className:"text-end ".concat(p.correctness)},a.createElement(g,{interaction:t,getCorrectness:e.getCorrectness}))))}function E(e){var t=e.timepoint,n=e.scrollTo,r=e.onClickDelete,i=e.selectedInteractionId,c=e.getCorrectness;function l(n){e.goToTimepoint(t.id,n,t.visibleAt)}return t.interactions?a.createElement(a.Fragment,null,t.interactions.map((function(o,m){return!e.experimentalInteractiveQuestions&&s.IL[o.typeId]?a.createElement(a.Fragment,{key:m}):a.createElement(f,{interaction:o,visibleAt:t.visibleAt,goToTimepoint:e.goToTimepoint&&l,onClickDelete:r,scrollTo:n,selectedInteractionId:i,isFirstInteraction:0===m,getCorrectness:c,key:m})}))):a.createElement(a.Fragment,null)}function y(e){var t=e.interactive,n=e.goToTimepoint,i=e.selectedInteractionId,c=e.maxHeight,l=e.onClickDelete,o=e.getCorrectness,s=a.useRef(null);function m(e,t){if(s.current){var n=s.current.getClientHeight(),a=s.current.getScrollTop(),r=e+a;(r<a||r+t>a+n)&&s.current.scrollTop(r-n/2+t/2)}}var u=n?"border rounded":"";return a.createElement(r.$B,{autoHeight:!0,autoHeightMax:c,className:u,hideTracksWhenNotNeeded:!0,ref:s},a.createElement("div",{className:"px-3 py-2"},t.timepoints.map((function(t,r){return a.createElement(E,{key:r,timepoint:t,goToTimepoint:n,selectedInteractionId:i,scrollTo:m,onClickDelete:l,getCorrectness:o,experimentalInteractiveQuestions:e.experimentalInteractiveQuestions})}))))}},28972:(e,t,n)=>{var a;n.d(t,{w:()=>a}),function(e){e[e.Correct=0]="Correct",e[e.Incorrect=1]="Incorrect",e[e.AwaitingMarking=2]="AwaitingMarking",e[e.Answered=3]="Answered",e[e.UnAnswered=4]="UnAnswered",e[e.NotApplicable=5]="NotApplicable"}(a||(a={}))},71241:(e,t,n)=>{n.d(t,{X:()=>T});var a=n(32735),r=n(44645),i=n(17327),c=n.n(i),l=n(56050),o=n(23481),s=n(81886),m=n(2786),u=n(93264),d=n(38129);const p={worksheet:"Bv47P",interaction:"efkgi",timepointCell:"ffoDR",interactionCell:"rKBEu",checkbox:"ilhe4",imageMultipleChoiceText:"Fwn9S",multipleChoiceAnswer:"TqhFx",shortAnswerTextArea:"voJCM",image:"go2dV",smallImage:"Yky48",cvLogo:"Z4GOw",copyright:"petLf",illustrationDrawingArea:"iA_Dl"};function v(e){return v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},v(e)}function g(e,t,n){return(t=function(e){var t=function(e){if("object"!=v(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=v(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==v(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var f=/{([^{}]*)}/g,E=["A","B","C","D"];function y(e){return a.createElement("div",{className:"mb-2"},e.interaction.name)}function b(e){var t=e.actionableItem,n=e.index;return a.createElement("td",{className:"align-top"},a.createElement("div",{className:p.multipleChoiceAnswer},a.createElement("div",{className:"border d-inline-block ".concat(p.checkbox)}),a.createElement("div",{className:p.imageMultipleChoiceText},t.name||E[n])),a.createElement("div",{className:"my-3 me-3"},a.createElement("img",{className:p.smallImage,src:t.data.imageUrl})))}function w(e){return e.interaction.actionableItems.find((function(e){var t;return!!(null===(t=e.data)||void 0===t?void 0:t.imageUrl)}))?a.createElement(a.Fragment,null,a.createElement(y,{interaction:e.interaction}),a.createElement("table",null,a.createElement("tbody",null,e.interaction.actionableItems.map((function(t,n){if(n%2!=0)return a.createElement(a.Fragment,{key:n});var r=e.interaction.actionableItems[n+1];return a.createElement("tr",{key:n},a.createElement(b,{actionableItem:t,index:n}),r?a.createElement(b,{actionableItem:r,index:n+1}):a.createElement("td",null))}))))):a.createElement(a.Fragment,null,a.createElement(y,{interaction:e.interaction}),a.createElement("table",null,a.createElement("tbody",null,e.interaction.actionableItems.map((function(e){return a.createElement("tr",{key:e.id},a.createElement("td",null,a.createElement("div",{className:"border ".concat(p.checkbox)})),a.createElement("td",{className:"break-word align-top"},a.createElement("div",{className:p.multipleChoiceAnswer},e.name)))})))))}var _=g(g(g(g(g(g(g({},d.Z9.Annotation,(function(e){return a.createElement("div",{dangerouslySetInnerHTML:{__html:e.interaction.data.annotation}})})),d.Z9.Image,(function(e){return a.createElement(a.Fragment,null,a.createElement(y,{interaction:e.interaction}),a.createElement("img",{className:p.image,src:e.interaction.data.url}))})),d.Z9.MissingWord,(function(e){var t=("string"==typeof e.interaction.data?JSON.parse(e.interaction.data).sentence:e.interaction.data.sentence).replace(f,(function(t,n){var a=2*e.interaction.actionableItems.find((function(e){return e.order.toString()===n})).name.length;return Array(a+1).join("_")}));return a.createElement("div",null,t)})),d.Z9.MultipleChoice,w),d.Z9.TrueOrFalse,w),d.Z9.ShortAnswer,(function(e){return a.createElement(a.Fragment,null,a.createElement(y,{interaction:e.interaction}),a.createElement("div",{className:"border w-100 ".concat(p.shortAnswerTextArea)}))})),d.Z9.Illustration,(function(e){return a.createElement(a.Fragment,null,a.createElement(y,{interaction:e.interaction}),a.createElement("div",{className:"w-100 border ".concat(p.illustrationDrawingArea)}))})),h=o.T.encloseNamespace("interactives.printableInteractiveWorksheet");function I(e){var t=_[e.interaction.typeId];return t?a.createElement("tr",{className:p.interaction},a.createElement("td",{className:"align-top ".concat(p.timepointCell)},u.T.ToDisplayDuration(e.visibleAt)),a.createElement("td",{className:"break-word ".concat(p.interactionCell)},a.createElement(t,{interaction:e.interaction}))):a.createElement(a.Fragment,null)}function C(e){return a.createElement(a.Fragment,null,e.interactive.timepoints.map((function(e,t){return e.interactions.map((function(n,r){return a.createElement(I,{key:"".concat(t,":").concat(r),interaction:n,visibleAt:e.visibleAt})}))})))}function N(e){var t=(new Date).getFullYear();return a.createElement("div",{id:e.worksheetElementId,className:p.worksheet},a.createElement("div",{className:"row pb-2"},a.createElement("div",{className:"col-6"},h("name")," ______________________________"),a.createElement("div",{className:"col-6"},h("date")," ______________________________")),a.createElement("h1",null,a.createElement("strong",null,h("questionSheet"),":")," ",e.interactive.name),a.createElement("table",null,a.createElement("tbody",null,a.createElement(C,{interactive:e.interactive}))),a.createElement("div",{className:p.cvLogo},a.createElement(m.$S,null)),e.isClickViewContent&&a.createElement("span",{className:p.copyright},h("copyright",{year:t})))}var k=o.T.encloseNamespace("interactives.utils");function T(e,t,n){var i=document.getElementById("print-region");if(i||s.Q.Ry.throw(new l.H("Could not find print region in layout")),e){var o="printable-interactive-".concat(e.id),m=(0,r.s)(i);m.render(a.createElement("div",{className:"d-none"},a.createElement(N,{worksheetElementId:o,interactive:e,isClickViewContent:t}))),window.setTimeout((function(){c()({printable:o,type:"html",documentTitle:k("worksheetTitle",{interactiveName:e.name}),targetStyles:["*"],style:"@page { size: A4; margin: 1.5cm 0; }",onLoadingEnd:function(){n&&n(),m.unmount()},font_size:"14px"})}),200)}}},47309:(e,t,n)=>{n.r(t),n.d(t,{PreviewQuestionsView:()=>k});var a=n(32735),r=n(23481),i=n(81886),c=n(20354),l=n(28400),o=n(65858),s=n(83657),m=n(8484),u=n(9111),d=n(13876),p=n(40178),v=n(4594),g=n(20768),f=n(37802),E=n(35223),y=n(31908),b=n(14070),w=n(97291),_=n(22490),h=n(71241);const I={printBtn:"VWlur"};function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var N=r.T.encloseNamespace("interactives.previewQuestions");function k(e){var t,n,r,k,T,A,x,S=(A=a.useState(!1),x=2,function(e){if(Array.isArray(e))return e}(A)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,c,l=[],o=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);o=!0);}catch(e){s=!0,r=e}finally{try{if(!o&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return l}}(A,x)||function(e,t){if(e){if("string"==typeof e)return C(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?C(e,t):void 0}}(A,x)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),D=S[0],F=S[1],V=(0,f.r)(null).experimentalInteractiveQuestions,P=c.a.useBasicFetch(g.b.interactiveMetadata(e.id)),M=c.a.useBasicFetch(P.data?g.b.interactive(P.data.interactiveId):null),B=null;P.data&&(B={id:P.data.id,interactiveId:P.data.interactiveId,name:P.data.name},(null===(t=P.data._parentVideo)||void 0===t?void 0:t.id)&&(B.video={id:P.data._parentVideo.id}),(null===(n=P.data._parentClip)||void 0===n?void 0:n.id)&&(B.clip={id:P.data._parentClip.id}));var L=[{label:N("watchInteractive"),className:"btn btn-outline-dark me-2",svgName:E.vn.Play,button:!0,appLink:{application:w.O.INTERACTIVES,action:b.e.Interactives.VIEW_INTERACTIVE,args:[e.id,l.m.slugify(null===(r=M.data)||void 0===r?void 0:r.name)]},onClick:e.closePopup,analyticsData:B,analyticsOptions:{entity:o.py.Interactive,actionType:o.Vw.Click,location:o.LZ.PreviewInteractiveQuestions,descriptor:o._S.Button}},{label:N("printAsWorksheet"),className:"btn btn-outline-dark ".concat(I.printBtn),svgName:E.vn.Print,button:!0,onClick:function(){var e;F(!0),(0,h.X)(M.data,null===(e=P.data._isClickViewCurated)||void 0===e?void 0:e.value,(function(){return F(!1)}))},showSpinner:D,analyticsData:B,analyticsOptions:{entity:o.py.Interactive,actionType:o.Vw.Print,location:o.LZ.PreviewInteractiveQuestions,workflowPhase:o.eu.Start,eventVersion:o.eq.V2}}];if(e.showBackButton){var Q=(null===(k=P.data)||void 0===k?void 0:k._parentClip)||(null===(T=P.data)||void 0===T?void 0:T._parentVideo);L.unshift({label:N("back"),appLink:_.W.getInteractiveGuidanceAppLink(null==Q?void 0:Q.id,y.M.isClip(Q)?v.E.Clip:v.E.Video),className:"btn btn-link me-2",button:!0,analyticsData:B,analyticsOptions:{entity:o.py.Interactive,actionType:o.Vw.Click,location:o.LZ.PreviewInteractiveQuestions,workflowPhase:o.eu.Back}})}return a.createElement(u.G,{title:N("mainTitle"),closePopup:e.closePopup,showLoadingSpinner:!M.data,size:"lg"},M.data?a.createElement(a.Fragment,null,a.createElement(m.Z,{interactive:M.data,maxHeight:p.x,experimentalInteractiveQuestions:V,goToTimepoint:function(t,n,a){var r;i.Q.C$.trigger({application:w.O.INTERACTIVES,action:b.e.Interactives.VIEW_INTERACTIVE,args:[e.id,l.m.slugify(null===(r=M.data)||void 0===r?void 0:r.name)],params:a?{t:Math.floor(a/1e3)}:null}),e.closePopup()}}),a.createElement(d.u,null,a.createElement(s.e,{actions:L}))):a.createElement(a.Fragment,null))}}}]);
|
|
2
|
+
//# sourceMappingURL=7309-2c6299bbc3-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/7309-2c6299bbc3-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/interactive-questions/interactive-questions.scss","file:///app/packages/libs/shared/src/components/interactive-questions/InteractiveQuestions.tsx","file:///app/packages/libs/shared/src/enums/InteractionCorrectness.ts","file:///app/packages/projects/lite/src/apps/interactives/components/printable-interactive-worksheet/printable-interactive-worksheet.scss","file:///app/packages/projects/lite/src/apps/interactives/components/printable-interactive-worksheet/PrintableInteractionContent.tsx","file:///app/packages/projects/lite/src/apps/interactives/components/printable-interactive-worksheet/PrintableInteractiveWorksheet.tsx","file:///app/packages/projects/lite/src/apps/interactives/utils/PrintInteractive.tsx","file:///app/packages/projects/lite/src/apps/interactives/views/preview-questions/preview-questions.scss","file:///app/packages/projects/lite/src/apps/interactives/views/preview-questions/PreviewQuestionsView.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"timeTag\":\"ShZvf\",\"hide\":\"FHzDr\",\"time\":\"JDp5N\",\"type\":\"AzIWg\",\"question\":\"UhEYq\",\"deleteContainer\":\"wBqoo\",\"delete\":\"OAQQu\",\"correctness\":\"W5sR9\",\"selected\":\"tfrDf\",\"row\":\"sGk59\"};","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { ExperimentalInteractionTypes, Interaction, Interactive, Timepoint } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { InteractionLabel } from './InteractionLabel';\n\nimport styles from './interactive-questions.scss';\n\nconst namespace = 'shared.interactiveQuestions';\n\ninterface CorrectnessProps {\n interaction: Interaction;\n getCorrectness?: (interaction: Interaction) => InteractionCorrectness;\n}\n\nfunction Correctness(props: CorrectnessProps): React.ReactElement {\n const { interaction, getCorrectness } = props;\n\n const correctness = getCorrectness(interaction);\n\n switch (correctness) {\n case InteractionCorrectness.Correct:\n return <span className='text-success'><SvgContainer size={SvgContainerSize.Medium} svgName={cvSvgLibrary.Check} /></span>;\n case InteractionCorrectness.Incorrect:\n return <span className='text-danger'><SvgContainer size={SvgContainerSize.Medium} svgName={cvSvgLibrary.Close} /></span>;\n case InteractionCorrectness.AwaitingMarking:\n return <span className='text-secondary italic'><i><Text namespace={namespace} phrase='pending' /></i></span>;\n case InteractionCorrectness.UnAnswered:\n return <button className='btn btn-outline-dark'><Text namespace={namespace} phrase='answer' /></button>;\n case InteractionCorrectness.Answered:\n return <span className='text-secondary italic'><i><Text namespace={namespace} phrase='answered' /></i></span>;\n case InteractionCorrectness.NotApplicable:\n return <></>;\n }\n}\n\ninterface InteractionComponentProps {\n interaction: Interaction;\n visibleAt: number;\n goToTimepoint: (interactionId: string) => void;\n onClickDelete?: (interactionId: string) => void;\n scrollTo: (offset: number, height: number) => void;\n selectedInteractionId: string;\n isFirstInteraction: boolean;\n getCorrectness?: (interaction: Interaction) => InteractionCorrectness;\n}\n\nfunction InteractionComponent(props: InteractionComponentProps): React.ReactElement {\n const {\n interaction,\n visibleAt,\n selectedInteractionId,\n goToTimepoint,\n scrollTo,\n isFirstInteraction\n } = props;\n\n const selected = interaction.id.toString() === selectedInteractionId?.toString();\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!selected)\n return;\n\n if (!ref.current)\n return;\n\n const el = ref.current;\n const rect = el.getBoundingClientRect();\n const offset = rect.top - el.offsetParent.getBoundingClientRect().top;\n\n scrollTo(offset, rect.height);\n }, [selected]);\n\n function onClick(): void {\n goToTimepoint && goToTimepoint(interaction.id);\n }\n\n function onClickDelete(event: React.MouseEvent): void {\n event.stopPropagation();\n\n props.onClickDelete(interaction.id);\n }\n\n /**\n * Don't have a cursor if there is no callback function.\n * i.e. when rendered in a popup\n */\n const cursor = goToTimepoint ? 'cursor-pointer' : 'cursor-default';\n\n return (\n <div ref={ref}>\n <DivButton className={`py-2 ${cursor} ${styles.row} ${selected ? styles.selected : ''}`} onClick={selected ? () => {} : onClick}>\n <div className={`me-3 d-inline-flex rounded-pill justify-content-center align-items-center text-info fw-semibold bg-light-blue ${styles.timeTag} ${isFirstInteraction ? '' : styles.hide}`}>\n {isFirstInteraction ? DurationHelper.ToDisplayDuration(visibleAt) : ''}\n </div>\n\n <InteractionLabel\n interaction={interaction}\n showTypeName\n typeNameClassName={styles.type}\n questionClassName={styles.question}\n />\n {props.onClickDelete && (\n <DivButton onClick={onClickDelete} className={`${styles.deleteContainer}`}>\n <span className={`text-end ${styles.delete}`}>\n <SvgContainer\n size={SvgContainerSize.Medium}\n svgName={cvSvgLibrary.Delete}\n />\n </span>\n </DivButton>\n )}\n {props.getCorrectness && (\n <span className={`text-end ${styles.correctness}`}>\n <Correctness interaction={interaction} getCorrectness={props.getCorrectness} />\n </span>\n )}\n </DivButton>\n </div>\n );\n}\n\ninterface TimepointComponentProps {\n timepoint: Timepoint;\n goToTimepoint?: (timepointId: string, interactionId: string, visibleAt: number) => void;\n selectedInteractionId?: string;\n scrollTo?: (offset: number, height: number) => void;\n onClickDelete?: (interactionId: string) => void;\n getCorrectness?: (interaction: Interaction) => InteractionCorrectness;\n experimentalInteractiveQuestions?: boolean;\n}\n\nexport function TimepointComponent(props: TimepointComponentProps): React.ReactElement {\n const {\n timepoint,\n scrollTo,\n onClickDelete,\n selectedInteractionId,\n getCorrectness\n } = props;\n\n function goToTimepoint(interactionId: string): void {\n props.goToTimepoint(timepoint.id, interactionId, timepoint.visibleAt);\n }\n\n if (!timepoint.interactions)\n return <></>;\n\n return (\n <>\n {timepoint.interactions.map((interaction, i) => {\n if (!props.experimentalInteractiveQuestions && ExperimentalInteractionTypes[interaction.typeId])\n return <React.Fragment key={i} />;\n\n return (\n <InteractionComponent\n interaction={interaction}\n visibleAt={timepoint.visibleAt}\n goToTimepoint={props.goToTimepoint && goToTimepoint}\n onClickDelete={onClickDelete}\n scrollTo={scrollTo}\n selectedInteractionId={selectedInteractionId}\n isFirstInteraction={i === 0}\n getCorrectness={getCorrectness}\n key={i}\n />\n );\n })\n }\n </>\n );\n}\n\nexport interface InteractiveQuestionProps {\n interactive: Interactive;\n goToTimepoint?: (timepointId: string, interactionId: string, visibleAt: number) => void;\n selectedInteractionId?: string;\n maxHeight: number;\n onClickDelete?: (interactionId: string) => void;\n getCorrectness?: (interaction: Interaction) => InteractionCorrectness;\n experimentalInteractiveQuestions?: boolean;\n}\n\nexport function InteractiveQuestions(props: InteractiveQuestionProps): React.ReactElement {\n const {\n interactive,\n goToTimepoint,\n selectedInteractionId,\n maxHeight,\n onClickDelete,\n getCorrectness\n } = props;\n\n const ref = React.useRef<Scrollbars>(null);\n\n function scrollTo(offset: number, elHeight: number): void {\n if (!ref.current)\n return;\n\n const height = ref.current.getClientHeight();\n const scroll = ref.current.getScrollTop();\n const elementFromTop = offset + scroll;\n\n /**\n * Element is above scroll window if it's distance from the top\n * is less than the scroll\n */\n const isAboveScrollWindow = elementFromTop < scroll;\n\n /**\n * Element is beneath scroll window if it's distance from the top\n * plus it's height is greater than the scroll plus the window height\n */\n const isBelowScrollWindow = (elementFromTop + elHeight) > (scroll + height);\n\n /**\n * So we don't scroll if our element is visible\n */\n if (!isAboveScrollWindow && !isBelowScrollWindow)\n return;\n\n /**\n * If our element isn't visible, we want to try scroll so the element is\n * centered in our viewport\n */\n ref.current.scrollTop(elementFromTop - (height / 2) + (elHeight / 2));\n }\n\n const borderClass = goToTimepoint ? 'border rounded' : '';\n\n return (\n <Scrollbars\n autoHeight\n autoHeightMax={maxHeight}\n className={borderClass}\n hideTracksWhenNotNeeded={true}\n ref={ref}\n >\n <div className='px-3 py-2'>\n {interactive.timepoints.map((t, i) => (\n <TimepointComponent\n key={i}\n timepoint={t}\n goToTimepoint={goToTimepoint}\n selectedInteractionId={selectedInteractionId}\n scrollTo={scrollTo}\n onClickDelete={onClickDelete}\n getCorrectness={getCorrectness}\n experimentalInteractiveQuestions={props.experimentalInteractiveQuestions}\n />\n ))\n }\n </div>\n </Scrollbars>\n );\n}\n","export enum InteractionCorrectness {\n Correct,\n Incorrect,\n AwaitingMarking,\n \n Answered,\n UnAnswered,\n NotApplicable\n}","// extracted by mini-css-extract-plugin\nexport default {\"worksheet\":\"Bv47P\",\"interaction\":\"efkgi\",\"timepointCell\":\"ffoDR\",\"interactionCell\":\"rKBEu\",\"checkbox\":\"ilhe4\",\"imageMultipleChoiceText\":\"Fwn9S\",\"multipleChoiceAnswer\":\"TqhFx\",\"shortAnswerTextArea\":\"voJCM\",\"image\":\"go2dV\",\"smallImage\":\"Yky48\",\"cvLogo\":\"Z4GOw\",\"copyright\":\"petLf\",\"illustrationDrawingArea\":\"iA_Dl\"};","import React from 'react';\n\nimport { ActionableItem, Interaction, InteractionTypeId } from 'libs/shared/interfaces';\n\nimport styles from './printable-interactive-worksheet.scss';\n\nconst MISSING_WORD_REGEX = /{([^{}]*)}/g;\n\nconst alphabet = [ 'A', 'B', 'C', 'D' ];\n\ninterface PrintableInteractionContentProps {\n interaction: Interaction;\n}\n\nfunction InteractionName(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <div className='mb-2'>{props.interaction.name}</div>\n );\n}\n\nfunction AnnotationInteraction(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <div dangerouslySetInnerHTML={{ __html: props.interaction.data.annotation }}></div>\n );\n}\n\nfunction ImageInteraction(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <>\n <InteractionName interaction={props.interaction} />\n <img className={styles.image} src={props.interaction.data.url} />\n </>\n );\n}\n\nfunction MissingWordInteraction(props: PrintableInteractionContentProps): JSX.Element {\n function replaceMissingWord(match: string, val: string): string {\n const actionableItem = props.interaction.actionableItems.find(a => a.order.toString() === val);\n const width = 2 * actionableItem.name.length;\n return Array(width + 1).join('_');\n }\n\n const sentence = typeof props.interaction.data === 'string'\n ? JSON.parse(props.interaction.data).sentence\n : props.interaction.data.sentence;\n\n const formatted = sentence.replace(MISSING_WORD_REGEX, replaceMissingWord);\n\n return (\n <div>{formatted}</div>\n );\n}\n\ninterface MultipleChoiceImageProps {\n actionableItem: ActionableItem;\n index: number;\n}\n\nfunction MultipleChoiceImage(props: MultipleChoiceImageProps): JSX.Element {\n const { actionableItem, index } = props;\n\n return (\n <td className='align-top'>\n <div className={styles.multipleChoiceAnswer}>\n <div className={`border d-inline-block ${styles.checkbox}`} />\n <div className={styles.imageMultipleChoiceText}>\n {actionableItem.name || alphabet[index]}\n </div>\n </div>\n <div className='my-3 me-3'>\n <img className={styles.smallImage} src={actionableItem.data.imageUrl} />\n </div>\n </td>\n );\n}\n\nfunction MultipleChoiceInteraction(props: PrintableInteractionContentProps): JSX.Element {\n const hasImages = !!props.interaction.actionableItems.find(a => !!a.data?.imageUrl);\n\n if (hasImages) {\n return (\n <>\n <InteractionName interaction={props.interaction} />\n <table>\n <tbody>\n {props.interaction.actionableItems.map((a, i) => {\n if (i % 2 !== 0)\n return <React.Fragment key={i} />;\n\n const next = props.interaction.actionableItems[i + 1];\n \n return (\n <tr key={i}>\n <MultipleChoiceImage actionableItem={a} index={i} />\n {next ? <MultipleChoiceImage actionableItem={next} index={i + 1} /> : <td></td>}\n </tr>\n );\n })}\n </tbody>\n </table>\n </>\n );\n }\n\n return (\n <>\n <InteractionName interaction={props.interaction} />\n <table>\n <tbody>\n {props.interaction.actionableItems.map(a => (\n <tr key={a.id}>\n <td>\n <div className={`border ${styles.checkbox}`} />\n </td>\n <td className='break-word align-top'>\n <div className={styles.multipleChoiceAnswer}>\n {a.name}\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </>\n );\n}\n\nfunction ShortAnswerInteraction(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <>\n <InteractionName interaction={props.interaction} />\n <div className={`border w-100 ${styles.shortAnswerTextArea}`} />\n </>\n );\n}\n\nfunction IllustrationInteraction(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <>\n <InteractionName interaction={props.interaction} />\n <div className={`w-100 border ${styles.illustrationDrawingArea}`} />\n </>\n );\n}\n\nexport const PrintableInteractionComponentLookup: {\n [typeId: number]: (props: PrintableInteractionContentProps) => JSX.Element\n} = {\n [InteractionTypeId.Annotation]: AnnotationInteraction,\n [InteractionTypeId.Image]: ImageInteraction,\n [InteractionTypeId.MissingWord]: MissingWordInteraction,\n [InteractionTypeId.MultipleChoice]: MultipleChoiceInteraction,\n [InteractionTypeId.TrueOrFalse]: MultipleChoiceInteraction,\n [InteractionTypeId.ShortAnswer]: ShortAnswerInteraction,\n [InteractionTypeId.Illustration]: IllustrationInteraction\n};\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ClickViewLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { Interaction, Interactive } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nimport { PrintableInteractionComponentLookup } from './PrintableInteractionContent';\n\nimport styles from './printable-interactive-worksheet.scss';\n\nconst getPhrase = LanguageService.encloseNamespace('interactives.printableInteractiveWorksheet');\n\ninterface PrintableInteractionProps {\n interaction: Interaction;\n visibleAt: number;\n}\n\nfunction PrintableInteraction(props: PrintableInteractionProps): JSX.Element {\n const InteractionComponent = PrintableInteractionComponentLookup[props.interaction.typeId];\n\n if (!InteractionComponent)\n return <></>;\n\n return (\n <tr className={styles.interaction}>\n <td className={`align-top ${styles.timepointCell}`}>\n {DurationHelper.ToDisplayDuration(props.visibleAt)}\n </td>\n <td className={`break-word ${styles.interactionCell}`}>\n <InteractionComponent interaction={props.interaction} />\n </td>\n </tr>\n );\n}\n\ninterface PrintableInteractiveQuestionsProps {\n interactive: Interactive;\n}\n\nfunction PrintableInteractiveQuestions(props: PrintableInteractiveQuestionsProps): JSX.Element {\n return (\n <>\n {props.interactive.timepoints.map((timepoint, i) => (\n timepoint.interactions.map((interaction, j) => (\n <PrintableInteraction key={`${i}:${j}`} interaction={interaction} visibleAt={timepoint.visibleAt} />\n ))\n ))}\n </>\n );\n}\n\ninterface PrintableInteractiveWorksheetProps {\n worksheetElementId: string;\n interactive: Interactive;\n isClickViewContent: boolean;\n}\n\nexport function PrintableInteractiveWorksheet(props: PrintableInteractiveWorksheetProps): JSX.Element {\n const year = (new Date()).getFullYear();\n\n return (\n <div id={props.worksheetElementId} className={styles.worksheet}>\n <div className='row pb-2'>\n <div className='col-6'>{getPhrase('name')} ______________________________</div>\n <div className='col-6'>{getPhrase('date')} ______________________________</div>\n </div>\n <h1>\n <strong>{getPhrase('questionSheet')}:</strong> {props.interactive.name}\n </h1>\n <table>\n <tbody>\n <PrintableInteractiveQuestions interactive={props.interactive} />\n </tbody>\n </table>\n <div className={styles.cvLogo}>\n <ClickViewLogo />\n </div>\n {props.isClickViewContent &&\n <span className={styles.copyright}>{getPhrase('copyright', { year })}</span>\n }\n </div>\n );\n}\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport printJS from 'print-js';\n\nimport { DevError } from 'libs/common/backbone/errors/DevError';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport { PrintableInteractiveWorksheet } from 'apps/interactives/components/printable-interactive-worksheet/PrintableInteractiveWorksheet';\n\nconst getPhrase = LanguageService.encloseNamespace('interactives.utils');\n\nexport function printInteractive(interactive: Interactive, isCVContent: boolean, onDone?: () => void): void {\n const printRegion = document.getElementById('print-region');\n\n if (!printRegion)\n Core.ErrorHelper.throw(new DevError('Could not find print region in layout'));\n\n if (!interactive)\n return;\n\n const worksheetElementId = `printable-interactive-${interactive.id}`;\n\n const root = createRoot(printRegion);\n\n function print(): void {\n printJS({\n printable: worksheetElementId,\n type: 'html',\n documentTitle: getPhrase('worksheetTitle', { interactiveName: interactive.name }),\n targetStyles: ['*'],\n style: '@page { size: A4; margin: 1.5cm 0; }',\n onLoadingEnd: () => {\n onDone && onDone();\n root.unmount();\n },\n /**\n * font_size is deprecated but a bug in print.js still applies the default (12pt) if it\n * is omitted, overriding any custom/inline styles. \n * This value is the same as the one found in in .worksheet in printable-interactive-worksheet.scss\n */\n font_size: '14px'\n });\n }\n\n root.render(\n <div className='d-none'>\n <PrintableInteractiveWorksheet\n worksheetElementId={worksheetElementId}\n interactive={interactive}\n isClickViewContent={isCVContent}\n />\n </div>\n );\n\n window.setTimeout(() => {\n print();\n }, 200);\n}","// extracted by mini-css-extract-plugin\nexport default {\"printBtn\":\"VWlur\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { ClickDescriptor, EntityType, EventVersion, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions, Actions as ActionButtons } from 'libs/shared/components/actions/Actions';\nimport { InteractiveQuestions } from 'libs/shared/components/interactive-questions/InteractiveQuestions';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { MINIMUM_GLANCE_HEIGHT } from 'libs/shared/constants/MinimumGlanceHeight';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Interactive, InteractiveMetadata, PopupViewProps } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { printInteractive } from 'apps/interactives/utils/PrintInteractive';\n\nimport styles from './preview-questions.scss';\n\nconst getPhrase = LanguageService.encloseNamespace('interactives.previewQuestions');\n\nexport interface PreviewQuestionsQueryParams {\n showBackButton?: boolean;\n}\n\ninterface PreviewQuestionsViewProps extends PopupViewProps {\n id: string;\n showBackButton?: boolean;\n}\n\nexport function PreviewQuestionsView(props: PreviewQuestionsViewProps): React.ReactElement {\n const [ showPrintButtonSpinner, setShowPrintButtonSpinner ] = React.useState(false);\n\n const { experimentalInteractiveQuestions } = useSettings(null);\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.id)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data ?\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId) : null);\n\n let analyticsData: HashObject = null;\n\n if (interactiveMetadata.data) {\n analyticsData = {\n id: interactiveMetadata.data.id,\n interactiveId: interactiveMetadata.data.interactiveId,\n name: interactiveMetadata.data.name\n };\n\n if (interactiveMetadata.data._parentVideo?.id)\n analyticsData.video = { id: interactiveMetadata.data._parentVideo.id };\n\n if (interactiveMetadata.data._parentClip?.id)\n analyticsData.clip = { id: interactiveMetadata.data._parentClip.id };\n }\n\n const actions: ActionOptions[] = [\n {\n label: getPhrase('watchInteractive'),\n className: 'btn btn-outline-dark me-2',\n svgName: cvSvgLibrary.Play,\n button: true,\n appLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ props.id, TextHelper.slugify(interactive.data?.name) ]\n },\n onClick: props.closePopup,\n analyticsData,\n analyticsOptions: {\n entity: EntityType.Interactive,\n actionType: UserAction.Click,\n location: LocationContext.PreviewInteractiveQuestions,\n descriptor: ClickDescriptor.Button\n }\n },\n {\n label: getPhrase('printAsWorksheet'),\n className: `btn btn-outline-dark ${styles.printBtn}`,\n svgName: cvSvgLibrary.Print,\n button: true,\n onClick: () => {\n setShowPrintButtonSpinner(true);\n printInteractive(\n interactive.data,\n interactiveMetadata.data._isClickViewCurated?.value,\n () => setShowPrintButtonSpinner(false)\n );\n },\n showSpinner: showPrintButtonSpinner,\n analyticsData,\n analyticsOptions: {\n entity: EntityType.Interactive,\n actionType: UserAction.Print,\n location: LocationContext.PreviewInteractiveQuestions,\n workflowPhase: WorkflowPhase.Start,\n eventVersion: EventVersion.V2\n }\n }\n ];\n\n if (props.showBackButton) {\n const parent = interactiveMetadata.data?._parentClip || interactiveMetadata.data?._parentVideo;\n\n actions.unshift({\n label: getPhrase('back'),\n appLink: VideoAppLinkHelper.getInteractiveGuidanceAppLink(\n parent?.id,\n VideoHelper.isClip(parent) ? MasterType.Clip : MasterType.Video\n ),\n className: 'btn btn-link me-2',\n button: true,\n analyticsData,\n analyticsOptions: {\n entity: EntityType.Interactive,\n actionType: UserAction.Click,\n location: LocationContext.PreviewInteractiveQuestions,\n workflowPhase: WorkflowPhase.Back\n }\n });\n }\n\n function goToTimepoint(_: string, __: string, visibleAt: number): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ props.id, TextHelper.slugify(interactive.data?.name) ],\n params: visibleAt ? { t: Math.floor(visibleAt / 1000) } : null\n });\n props.closePopup();\n }\n\n return (\n <Popup\n title={getPhrase('mainTitle')}\n closePopup={props.closePopup}\n showLoadingSpinner={!interactive.data}\n size='lg'\n >\n {(() => {\n if (!interactive.data)\n return <></>;\n\n return (\n <>\n <InteractiveQuestions\n interactive={interactive.data}\n maxHeight={MINIMUM_GLANCE_HEIGHT}\n experimentalInteractiveQuestions={experimentalInteractiveQuestions}\n goToTimepoint={goToTimepoint}\n />\n <PopupButtons>\n <ActionButtons actions={actions} />\n </PopupButtons>\n </>\n );\n })()}\n </Popup>\n );\n}\n"],"names":["namespace","Correctness","props","interaction","getCorrectness","InteractionCorrectness","className","SvgContainer","size","S","svgName","Text","phrase","InteractionComponent","visibleAt","selectedInteractionId","goToTimepoint","scrollTo","isFirstInteraction","selected","id","toString","ref","current","el","rect","getBoundingClientRect","offset","top","offsetParent","height","cursor","DivButton","onClick","DurationHelper","InteractionLabel","showTypeName","typeNameClassName","questionClassName","onClickDelete","event","stopPropagation","TimepointComponent","timepoint","interactionId","interactions","map","i","experimentalInteractiveQuestions","typeId","key","InteractiveQuestions","interactive","maxHeight","elHeight","getClientHeight","scroll","getScrollTop","elementFromTop","scrollTop","borderClass","autoHeight","autoHeightMax","hideTracksWhenNotNeeded","timepoints","t","MISSING_WORD_REGEX","alphabet","InteractionName","name","MultipleChoiceImage","actionableItem","index","src","data","imageUrl","MultipleChoiceInteraction","actionableItems","find","a","next","PrintableInteractionComponentLookup","dangerouslySetInnerHTML","__html","annotation","url","formatted","JSON","parse","sentence","replace","match","val","width","order","length","Array","join","getPhrase","LanguageService","PrintableInteraction","PrintableInteractiveQuestions","j","PrintableInteractiveWorksheet","year","Date","getFullYear","worksheetElementId","ClickViewLogo","isClickViewContent","printInteractive","isCVContent","onDone","printRegion","document","getElementById","DevError","root","render","window","setTimeout","printable","type","documentTitle","interactiveName","targetStyles","style","onLoadingEnd","unmount","font_size","PreviewQuestionsView","showPrintButtonSpinner","setShowPrintButtonSpinner","useSettings","interactiveMetadata","InteractiveRequests","interactiveId","analyticsData","_parentVideo","video","_parentClip","clip","actions","label","button","appLink","application","action","args","TextHelper","closePopup","analyticsOptions","entity","actionType","location","descriptor","_isClickViewCurated","value","showSpinner","workflowPhase","eventVersion","showBackButton","parent","unshift","VideoAppLinkHelper","VideoHelper","MasterType","Popup","title","showLoadingSpinner","_","__","params","Math","floor","PopupButtons"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8046],{71241:(e,t,n)=>{n.d(t,{X:()=>A});var a=n(32735),r=n(44645),i=n(17327),c=n.n(i),l=n(56050),o=n(23481),m=n(81886),s=n(2786),u=n(93264),d=n(38129);const v={worksheet:"Bv47P",interaction:"efkgi",timepointCell:"ffoDR",interactionCell:"rKBEu",checkbox:"ilhe4",imageMultipleChoiceText:"Fwn9S",multipleChoiceAnswer:"TqhFx",shortAnswerTextArea:"voJCM",image:"go2dV",smallImage:"Yky48",cvLogo:"Z4GOw",copyright:"petLf",illustrationDrawingArea:"iA_Dl"};function _(e){return _="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_(e)}function E(e,t,n){return(t=function(e){var t=function(e){if("object"!=_(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=_(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==_(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var p=/{([^{}]*)}/g,f=["A","B","C","D"];function b(e){return a.createElement("div",{className:"mb-2"},e.interaction.name)}function g(e){var t=e.actionableItem,n=e.index;return a.createElement("td",{className:"align-top"},a.createElement("div",{className:v.multipleChoiceAnswer},a.createElement("div",{className:"border d-inline-block ".concat(v.checkbox)}),a.createElement("div",{className:v.imageMultipleChoiceText},t.name||f[n])),a.createElement("div",{className:"my-3 me-3"},a.createElement("img",{className:v.smallImage,src:t.data.imageUrl})))}function y(e){return e.interaction.actionableItems.find((function(e){var t;return!!(null===(t=e.data)||void 0===t?void 0:t.imageUrl)}))?a.createElement(a.Fragment,null,a.createElement(b,{interaction:e.interaction}),a.createElement("table",null,a.createElement("tbody",null,e.interaction.actionableItems.map((function(t,n){if(n%2!=0)return a.createElement(a.Fragment,{key:n});var r=e.interaction.actionableItems[n+1];return a.createElement("tr",{key:n},a.createElement(g,{actionableItem:t,index:n}),r?a.createElement(g,{actionableItem:r,index:n+1}):a.createElement("td",null))}))))):a.createElement(a.Fragment,null,a.createElement(b,{interaction:e.interaction}),a.createElement("table",null,a.createElement("tbody",null,e.interaction.actionableItems.map((function(e){return a.createElement("tr",{key:e.id},a.createElement("td",null,a.createElement("div",{className:"border ".concat(v.checkbox)})),a.createElement("td",{className:"break-word align-top"},a.createElement("div",{className:v.multipleChoiceAnswer},e.name)))})))))}var w=E(E(E(E(E(E(E({},d.Z9.Annotation,(function(e){return a.createElement("div",{dangerouslySetInnerHTML:{__html:e.interaction.data.annotation}})})),d.Z9.Image,(function(e){return a.createElement(a.Fragment,null,a.createElement(b,{interaction:e.interaction}),a.createElement("img",{className:v.image,src:e.interaction.data.url}))})),d.Z9.MissingWord,(function(e){var t=("string"==typeof e.interaction.data?JSON.parse(e.interaction.data).sentence:e.interaction.data.sentence).replace(p,(function(t,n){var a=2*e.interaction.actionableItems.find((function(e){return e.order.toString()===n})).name.length;return Array(a+1).join("_")}));return a.createElement("div",null,t)})),d.Z9.MultipleChoice,y),d.Z9.TrueOrFalse,y),d.Z9.ShortAnswer,(function(e){return a.createElement(a.Fragment,null,a.createElement(b,{interaction:e.interaction}),a.createElement("div",{className:"border w-100 ".concat(v.shortAnswerTextArea)}))})),d.Z9.Illustration,(function(e){return a.createElement(a.Fragment,null,a.createElement(b,{interaction:e.interaction}),a.createElement("div",{className:"w-100 border ".concat(v.illustrationDrawingArea)}))})),h=o.T.encloseNamespace("interactives.printableInteractiveWorksheet");function N(e){var t=w[e.interaction.typeId];return t?a.createElement("tr",{className:v.interaction},a.createElement("td",{className:"align-top ".concat(v.timepointCell)},u.T.ToDisplayDuration(e.visibleAt)),a.createElement("td",{className:"break-word ".concat(v.interactionCell)},a.createElement(t,{interaction:e.interaction}))):a.createElement(a.Fragment,null)}function k(e){return a.createElement(a.Fragment,null,e.interactive.timepoints.map((function(e,t){return e.interactions.map((function(n,r){return a.createElement(N,{key:"".concat(t,":").concat(r),interaction:n,visibleAt:e.visibleAt})}))})))}function C(e){var t=(new Date).getFullYear();return a.createElement("div",{id:e.worksheetElementId,className:v.worksheet},a.createElement("div",{className:"row pb-2"},a.createElement("div",{className:"col-6"},h("name")," ______________________________"),a.createElement("div",{className:"col-6"},h("date")," ______________________________")),a.createElement("h1",null,a.createElement("strong",null,h("questionSheet"),":")," ",e.interactive.name),a.createElement("table",null,a.createElement("tbody",null,a.createElement(k,{interactive:e.interactive}))),a.createElement("div",{className:v.cvLogo},a.createElement(s.$S,null)),e.isClickViewContent&&a.createElement("span",{className:v.copyright},h("copyright",{year:t})))}var I=o.T.encloseNamespace("interactives.utils");function A(e,t,n){var i=document.getElementById("print-region");if(i||m.Q.Ry.throw(new l.H("Could not find print region in layout")),e){var o="printable-interactive-".concat(e.id),s=(0,r.s)(i);s.render(a.createElement("div",{className:"d-none"},a.createElement(C,{worksheetElementId:o,interactive:e,isClickViewContent:t}))),window.setTimeout((function(){c()({printable:o,type:"html",documentTitle:I("worksheetTitle",{interactiveName:e.name}),targetStyles:["*"],style:"@page { size: A4; margin: 1.5cm 0; }",onLoadingEnd:function(){n&&n(),s.unmount()},font_size:"14px"})}),200)}}},59678:(e,t,n)=>{n.r(t),n.d(t,{PrintInteractiveView:()=>u});var a=n(32735),r=n(23481),i=n(20354),c=n(9111),l=n(50023),o=n(20768),m=n(71241),s=r.T.encloseNamespace("interactives.printInteractive");function u(e){var t=i.a.useBasicFetch(o.b.interactiveMetadata(e.id)),n=i.a.useBasicFetch(t.data?o.b.interactive(t.data.interactiveId):null);return a.useEffect((function(){var a;n.data&&(0,m.X)(n.data,null===(a=t.data._isClickViewCurated)||void 0===a?void 0:a.value,e.closePopup)}),[!!n.data]),a.createElement(c.G,{title:s("popupTitle"),closePopup:e.closePopup,showLoadingSpinner:!n.data,size:"lg"},a.createElement(l.E,null))}}}]);
|
|
2
|
+
//# sourceMappingURL=8046-590720816e-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/8046-590720816e-lite.chunk.js","mappings":"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","sources":["file:///app/packages/projects/lite/src/apps/interactives/components/printable-interactive-worksheet/printable-interactive-worksheet.scss","file:///app/packages/projects/lite/src/apps/interactives/components/printable-interactive-worksheet/PrintableInteractionContent.tsx","file:///app/packages/projects/lite/src/apps/interactives/components/printable-interactive-worksheet/PrintableInteractiveWorksheet.tsx","file:///app/packages/projects/lite/src/apps/interactives/utils/PrintInteractive.tsx","file:///app/packages/projects/lite/src/apps/interactives/views/print-interactive/PrintInteractiveView.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"worksheet\":\"Bv47P\",\"interaction\":\"efkgi\",\"timepointCell\":\"ffoDR\",\"interactionCell\":\"rKBEu\",\"checkbox\":\"ilhe4\",\"imageMultipleChoiceText\":\"Fwn9S\",\"multipleChoiceAnswer\":\"TqhFx\",\"shortAnswerTextArea\":\"voJCM\",\"image\":\"go2dV\",\"smallImage\":\"Yky48\",\"cvLogo\":\"Z4GOw\",\"copyright\":\"petLf\",\"illustrationDrawingArea\":\"iA_Dl\"};","import React from 'react';\n\nimport { ActionableItem, Interaction, InteractionTypeId } from 'libs/shared/interfaces';\n\nimport styles from './printable-interactive-worksheet.scss';\n\nconst MISSING_WORD_REGEX = /{([^{}]*)}/g;\n\nconst alphabet = [ 'A', 'B', 'C', 'D' ];\n\ninterface PrintableInteractionContentProps {\n interaction: Interaction;\n}\n\nfunction InteractionName(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <div className='mb-2'>{props.interaction.name}</div>\n );\n}\n\nfunction AnnotationInteraction(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <div dangerouslySetInnerHTML={{ __html: props.interaction.data.annotation }}></div>\n );\n}\n\nfunction ImageInteraction(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <>\n <InteractionName interaction={props.interaction} />\n <img className={styles.image} src={props.interaction.data.url} />\n </>\n );\n}\n\nfunction MissingWordInteraction(props: PrintableInteractionContentProps): JSX.Element {\n function replaceMissingWord(match: string, val: string): string {\n const actionableItem = props.interaction.actionableItems.find(a => a.order.toString() === val);\n const width = 2 * actionableItem.name.length;\n return Array(width + 1).join('_');\n }\n\n const sentence = typeof props.interaction.data === 'string'\n ? JSON.parse(props.interaction.data).sentence\n : props.interaction.data.sentence;\n\n const formatted = sentence.replace(MISSING_WORD_REGEX, replaceMissingWord);\n\n return (\n <div>{formatted}</div>\n );\n}\n\ninterface MultipleChoiceImageProps {\n actionableItem: ActionableItem;\n index: number;\n}\n\nfunction MultipleChoiceImage(props: MultipleChoiceImageProps): JSX.Element {\n const { actionableItem, index } = props;\n\n return (\n <td className='align-top'>\n <div className={styles.multipleChoiceAnswer}>\n <div className={`border d-inline-block ${styles.checkbox}`} />\n <div className={styles.imageMultipleChoiceText}>\n {actionableItem.name || alphabet[index]}\n </div>\n </div>\n <div className='my-3 me-3'>\n <img className={styles.smallImage} src={actionableItem.data.imageUrl} />\n </div>\n </td>\n );\n}\n\nfunction MultipleChoiceInteraction(props: PrintableInteractionContentProps): JSX.Element {\n const hasImages = !!props.interaction.actionableItems.find(a => !!a.data?.imageUrl);\n\n if (hasImages) {\n return (\n <>\n <InteractionName interaction={props.interaction} />\n <table>\n <tbody>\n {props.interaction.actionableItems.map((a, i) => {\n if (i % 2 !== 0)\n return <React.Fragment key={i} />;\n\n const next = props.interaction.actionableItems[i + 1];\n \n return (\n <tr key={i}>\n <MultipleChoiceImage actionableItem={a} index={i} />\n {next ? <MultipleChoiceImage actionableItem={next} index={i + 1} /> : <td></td>}\n </tr>\n );\n })}\n </tbody>\n </table>\n </>\n );\n }\n\n return (\n <>\n <InteractionName interaction={props.interaction} />\n <table>\n <tbody>\n {props.interaction.actionableItems.map(a => (\n <tr key={a.id}>\n <td>\n <div className={`border ${styles.checkbox}`} />\n </td>\n <td className='break-word align-top'>\n <div className={styles.multipleChoiceAnswer}>\n {a.name}\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </>\n );\n}\n\nfunction ShortAnswerInteraction(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <>\n <InteractionName interaction={props.interaction} />\n <div className={`border w-100 ${styles.shortAnswerTextArea}`} />\n </>\n );\n}\n\nfunction IllustrationInteraction(props: PrintableInteractionContentProps): JSX.Element {\n return (\n <>\n <InteractionName interaction={props.interaction} />\n <div className={`w-100 border ${styles.illustrationDrawingArea}`} />\n </>\n );\n}\n\nexport const PrintableInteractionComponentLookup: {\n [typeId: number]: (props: PrintableInteractionContentProps) => JSX.Element\n} = {\n [InteractionTypeId.Annotation]: AnnotationInteraction,\n [InteractionTypeId.Image]: ImageInteraction,\n [InteractionTypeId.MissingWord]: MissingWordInteraction,\n [InteractionTypeId.MultipleChoice]: MultipleChoiceInteraction,\n [InteractionTypeId.TrueOrFalse]: MultipleChoiceInteraction,\n [InteractionTypeId.ShortAnswer]: ShortAnswerInteraction,\n [InteractionTypeId.Illustration]: IllustrationInteraction\n};\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ClickViewLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { Interaction, Interactive } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nimport { PrintableInteractionComponentLookup } from './PrintableInteractionContent';\n\nimport styles from './printable-interactive-worksheet.scss';\n\nconst getPhrase = LanguageService.encloseNamespace('interactives.printableInteractiveWorksheet');\n\ninterface PrintableInteractionProps {\n interaction: Interaction;\n visibleAt: number;\n}\n\nfunction PrintableInteraction(props: PrintableInteractionProps): JSX.Element {\n const InteractionComponent = PrintableInteractionComponentLookup[props.interaction.typeId];\n\n if (!InteractionComponent)\n return <></>;\n\n return (\n <tr className={styles.interaction}>\n <td className={`align-top ${styles.timepointCell}`}>\n {DurationHelper.ToDisplayDuration(props.visibleAt)}\n </td>\n <td className={`break-word ${styles.interactionCell}`}>\n <InteractionComponent interaction={props.interaction} />\n </td>\n </tr>\n );\n}\n\ninterface PrintableInteractiveQuestionsProps {\n interactive: Interactive;\n}\n\nfunction PrintableInteractiveQuestions(props: PrintableInteractiveQuestionsProps): JSX.Element {\n return (\n <>\n {props.interactive.timepoints.map((timepoint, i) => (\n timepoint.interactions.map((interaction, j) => (\n <PrintableInteraction key={`${i}:${j}`} interaction={interaction} visibleAt={timepoint.visibleAt} />\n ))\n ))}\n </>\n );\n}\n\ninterface PrintableInteractiveWorksheetProps {\n worksheetElementId: string;\n interactive: Interactive;\n isClickViewContent: boolean;\n}\n\nexport function PrintableInteractiveWorksheet(props: PrintableInteractiveWorksheetProps): JSX.Element {\n const year = (new Date()).getFullYear();\n\n return (\n <div id={props.worksheetElementId} className={styles.worksheet}>\n <div className='row pb-2'>\n <div className='col-6'>{getPhrase('name')} ______________________________</div>\n <div className='col-6'>{getPhrase('date')} ______________________________</div>\n </div>\n <h1>\n <strong>{getPhrase('questionSheet')}:</strong> {props.interactive.name}\n </h1>\n <table>\n <tbody>\n <PrintableInteractiveQuestions interactive={props.interactive} />\n </tbody>\n </table>\n <div className={styles.cvLogo}>\n <ClickViewLogo />\n </div>\n {props.isClickViewContent &&\n <span className={styles.copyright}>{getPhrase('copyright', { year })}</span>\n }\n </div>\n );\n}\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport printJS from 'print-js';\n\nimport { DevError } from 'libs/common/backbone/errors/DevError';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { Interactive } from 'libs/shared/interfaces';\n\nimport { PrintableInteractiveWorksheet } from 'apps/interactives/components/printable-interactive-worksheet/PrintableInteractiveWorksheet';\n\nconst getPhrase = LanguageService.encloseNamespace('interactives.utils');\n\nexport function printInteractive(interactive: Interactive, isCVContent: boolean, onDone?: () => void): void {\n const printRegion = document.getElementById('print-region');\n\n if (!printRegion)\n Core.ErrorHelper.throw(new DevError('Could not find print region in layout'));\n\n if (!interactive)\n return;\n\n const worksheetElementId = `printable-interactive-${interactive.id}`;\n\n const root = createRoot(printRegion);\n\n function print(): void {\n printJS({\n printable: worksheetElementId,\n type: 'html',\n documentTitle: getPhrase('worksheetTitle', { interactiveName: interactive.name }),\n targetStyles: ['*'],\n style: '@page { size: A4; margin: 1.5cm 0; }',\n onLoadingEnd: () => {\n onDone && onDone();\n root.unmount();\n },\n /**\n * font_size is deprecated but a bug in print.js still applies the default (12pt) if it\n * is omitted, overriding any custom/inline styles. \n * This value is the same as the one found in in .worksheet in printable-interactive-worksheet.scss\n */\n font_size: '14px'\n });\n }\n\n root.render(\n <div className='d-none'>\n <PrintableInteractiveWorksheet\n worksheetElementId={worksheetElementId}\n interactive={interactive}\n isClickViewContent={isCVContent}\n />\n </div>\n );\n\n window.setTimeout(() => {\n print();\n }, 200);\n}","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupLoadingSpinner } from 'libs/shared/components/popup/PopupLoadingSpinner';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { Interactive, InteractiveMetadata, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { printInteractive } from 'apps/interactives/utils/PrintInteractive';\n\nconst getPhrase = LanguageService.encloseNamespace('interactives.printInteractive');\n\ninterface PrintInteractiveViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function PrintInteractiveView(props: PrintInteractiveViewProps): React.ReactElement {\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.id)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data ?\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId) : null);\n\n React.useEffect(() => {\n if (!interactive.data)\n return;\n\n printInteractive(interactive.data, interactiveMetadata.data._isClickViewCurated?.value, props.closePopup);\n }, [!!interactive.data]);\n\n return (\n <Popup\n title={getPhrase('popupTitle')}\n closePopup={props.closePopup}\n showLoadingSpinner={!interactive.data}\n size='lg'\n >\n <PopupLoadingSpinner />\n </Popup>\n );\n}\n"],"names":["MISSING_WORD_REGEX","alphabet","InteractionName","props","className","interaction","name","MultipleChoiceImage","actionableItem","index","src","data","imageUrl","MultipleChoiceInteraction","actionableItems","find","a","map","i","key","next","id","PrintableInteractionComponentLookup","dangerouslySetInnerHTML","__html","annotation","url","formatted","JSON","parse","sentence","replace","match","val","width","order","toString","length","Array","join","getPhrase","LanguageService","PrintableInteraction","InteractionComponent","typeId","DurationHelper","visibleAt","PrintableInteractiveQuestions","interactive","timepoints","timepoint","interactions","j","PrintableInteractiveWorksheet","year","Date","getFullYear","worksheetElementId","ClickViewLogo","isClickViewContent","printInteractive","isCVContent","onDone","printRegion","document","getElementById","DevError","root","render","window","setTimeout","printable","type","documentTitle","interactiveName","targetStyles","style","onLoadingEnd","unmount","font_size","PrintInteractiveView","interactiveMetadata","interactiveId","_isClickViewCurated","value","closePopup","title","showLoadingSpinner","size"],"sourceRoot":""}
|