UNPKG

directus-extension-find-duplicates

Version:

Find duplicates in Directus collections based on specified fields.

2 lines (1 loc) 5.54 kB
import{useApi as e,useStores as t,defineModule as l}from"@directus/extensions-sdk";import{ref as a,watch as n,computed as s,resolveComponent as o,createBlock as i,openBlock as u,unref as c,withCtx as r,createElementVNode as d,createElementBlock as p,createCommentVNode as m,createVNode as v,toDisplayString as f,createTextVNode as b,Fragment as h,renderList as g}from"vue";import{useI18n as C}from"vue-i18n";const F={en:{title:"Find Duplicates",selectCollection:"Select a Collection",chooseCollection:"Choose a collection",selectField:"Select a Field",chooseField:"Choose a field",findDuplicates:"Find Duplicates",noDuplicates:"No duplicates found 🎉",duplicatesFound:"Duplicates Found",openItem:"Open Item",duplicatesFor:"Duplicates for",value:"Value",times:"times"},fr:{title:"Rechercher les doublons",selectCollection:"Sélectionner une collection",chooseCollection:"Choisir une collection",selectField:"Sélectionner un champ",chooseField:"Choisir un champ",findDuplicates:"Rechercher les doublons",noDuplicates:"Aucun doublon trouvé 🎉",duplicatesFound:"Doublons trouvés",openItem:"Ouvrir l'élément",duplicatesFor:"Doublons pour",value:"Valeur",times:"fois"}};var x=[],y=[];!function(e,t){if(e&&"undefined"!=typeof document){var l,a=!0===t.prepend?"prepend":"append",n=!0===t.singleTag,s="string"==typeof t.container?document.querySelector(t.container):document.getElementsByTagName("head")[0];if(n){var o=x.indexOf(s);-1===o&&(o=x.push(s)-1,y[o]={}),l=y[o]&&y[o][a]?y[o][a]:y[o][a]=i()}else l=i();65279===e.charCodeAt(0)&&(e=e.substring(1)),l.styleSheet?l.styleSheet.cssText+=e:l.appendChild(document.createTextNode(e))}function i(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),t.attributes)for(var l=Object.keys(t.attributes),n=0;n<l.length;n++)e.setAttribute(l[n],t.attributes[l[n]]);var o="prepend"===a?"afterbegin":"beforeend";return s.insertAdjacentElement(o,e),e}}("\n.step[data-v-3041bf49] {\n margin-bottom: 30px;\n padding: 0 46px;\n}\n.text-primary[data-v-3041bf49] {\n color: var(--primary);\n}\n.alert[data-v-3041bf49] {\n padding: 12px 46px;\n border-radius: 6px;\n margin-top: 16px;\n max-width: 800px;\n margin-left: auto;\n margin-right: auto;\n}\n.alert.success[data-v-3041bf49] {\n background: var(--theme--success-background, #e0ffe0);\n color: var(--theme--success-foreground, #067d06);\n border: 1px solid var(--theme--success-border, #9de89d);\n}\n",{});var D=(e,t)=>{const l=e.__vccOpts||e;for(const[e,a]of t)l[e]=a;return l};const S={class:"step"},_={class:"step"},k={class:"step"},V={key:0,class:"alert success"},A={key:1,class:"step"},O={class:"font-bold mb-2"},j={class:"ml-2"},w=["href"],I={__name:"module",setup(l){const x=e(),{useCollectionsStore:y,useFieldsStore:D}=t(),I=y(),T=D(),U=a(null),E=a([]),L=a([]),N=a(!1),{useSettingsStore:$}=t(),{settings:R}=$(),q=R?.default_language,{t:B}=C({locale:(z=q,z?z.includes("-")?z.split("-")[0].toLowerCase():z.toLowerCase():"en"),messages:F});var z;n(E,()=>{L.value=[],N.value=!1});const G=s(()=>Object.values(I.collections).filter(e=>!e.system).map(e=>({label:e.name.charAt(0).toUpperCase()+e.name.slice(1),value:e.collection})).sort((e,t)=>e.label.localeCompare(t.label))),H=s(()=>{if(!U.value)return[];return T.getFieldsForCollection(U.value).map(e=>({label:e.name.charAt(0).toUpperCase()+e.name.slice(1),value:e.field})).sort((e,t)=>e.label.localeCompare(t.label))});async function J(){E.value=[],L.value=[],N.value=!1}async function K(){L.value=[],N.value=!1;const e=E.value,t=U.value;if(!e.length)return;const{data:l}=await x.get(`/items/${t}`,{params:{limit:-1,fields:["id",...e]}}),a={};for(const t of l.data){const l=e.map(e=>(t[e]??"").toString().trim().toLowerCase()).join("||");l&&(a[l]||(a[l]=[]),a[l].push(t))}L.value=Object.entries(a).filter(([,e])=>e.length>1).map(([e,t])=>({value:e,items:t})),N.value=!0}return(e,t)=>{const l=o("v-select"),a=o("v-button"),n=o("v-card"),s=o("private-view");return u(),i(s,{title:c(B)("title"),class:"find-duplicates-ui"},{default:r(()=>[d("div",S,[d("h2",null,f(c(B)("selectCollection")),1),v(l,{modelValue:U.value,"onUpdate:modelValue":[t[0]||(t[0]=e=>U.value=e),J],items:G.value,"item-text":"label","item-value":"value",label:c(B)("chooseCollection")},null,8,["modelValue","items","label"])]),d("div",_,[d("h2",null,f(c(B)("selectField")),1),v(l,{modelValue:E.value,"onUpdate:modelValue":t[1]||(t[1]=e=>E.value=e),items:H.value,"item-text":"label","item-value":"value",label:c(B)("chooseField"),multiple:"",disabled:!U.value},null,8,["modelValue","items","label","disabled"])]),d("div",k,[v(a,{onClick:K,disabled:0===E.value.length},{default:r(()=>[b(f(c(B)("findDuplicates")),1)]),_:1},8,["disabled"])]),0===L.value.length&&N.value?(u(),p("div",V,f(c(B)("noDuplicates")),1)):m("v-if",!0),L.value.length>0?(u(),p("div",A,[d("h2",null,f(c(B)("duplicatesFound"))+" ("+f(L.value.length)+")",1),(u(!0),p(h,null,g(L.value,(e,t)=>(u(),i(n,{key:t,class:"p-4"},{default:r(()=>[d("div",O,[b(f(c(B)("duplicatesFor"))+": ",1),d("span",j,f(E.value.map(t=>e.items[0][t]).join(" | ")),1),b(" ("+f(e.items.length)+" "+f(c(B)("times"))+") ",1)]),d("ul",null,[(u(!0),p(h,null,g(e.items,e=>(u(),p("li",{key:e.id},[d("a",{href:`/admin/content/${U.value}/${e.id}`,class:"text-primary underline",target:"_blank"},f(c(B)("openItem"))+" #"+f(e.id),9,w)]))),128))])]),_:2},1024))),128))])):m("v-if",!0)]),_:1},8,["title"])}}};var T=l({id:"find-duplicates",name:"Find Duplicates",icon:"search",routes:[{path:"",component:D(I,[["__scopeId","data-v-3041bf49"]])}]});export{T as default};