Skip to content
Snippets Groups Projects
Commit 35ffa830 authored by Duy Minh Vo's avatar Duy Minh Vo
Browse files

fix(dpi): fix dataset id validation reacting to uniqueness response

parent 3a9fe78e
No related branches found
No related tags found
No related merge requests found
...@@ -11,9 +11,8 @@ let env = getCurrentInstance().appContext.app.config.globalProperties.$env; ...@@ -11,9 +11,8 @@ let env = getCurrentInstance().appContext.app.config.globalProperties.$env;
const store = useStore(); const store = useStore();
const dpiContext = useDpiContext(); const dpiContext = useDpiContext();
const isDuplicate = ref(); const isDuplicate = ref(localStorage.getItem('dpi_duplicate') || false);
const isEditMode = computed(() => !!dpiContext.value.edit?.enabled) const isEditMode = computed(() => !!dpiContext.value.edit?.enabled)
isDuplicate.value = localStorage.getItem('dpi_duplicate');
const { t, locale } = useI18n({ useScope: 'global' }); const { t, locale } = useI18n({ useScope: 'global' });
...@@ -31,34 +30,33 @@ onMounted(() => { ...@@ -31,34 +30,33 @@ onMounted(() => {
validationMessages.value.required = t('message.dataupload.datasets.datasetID.required'); validationMessages.value.required = t('message.dataupload.datasets.datasetID.required');
}); });
const draftIDs = store.getters['auth/getUserDraftIds'];
watchEffect(() => { const hubUrl = env.api.hubUrl;
function idunique(node) {
const id = node?.value;
});
return new Promise(async (resolve) => {
// resolve(true) -> datasetId is unique
// resolve(false) -> datasetId is not unique
async function idunique(node) {
let isUniqueID = true; if (isNil(id) || id === '' || id === undefined) resolve(true)
let hubUrl = env.api.hubUrl;
const draftIDs = store.getters['auth/getUserDraftIds']; const existIdInUserDrafts = draftIDs?.includes(id)
if (existIdInUserDrafts) resolve(false)
new Promise(() => {
if (isNil(node.value) || node.value === '' || node.value === undefined) isUniqueID = true; const request = `${hubUrl}datasets/${id}?useNormalizedId=true`;
else if (draftIDs.includes(node.value)) isUniqueID = false; try {
else { const res = await axios.head(request);
const request = `${hubUrl}datasets/${node.value}?useNormalizedId=true`; // if 2xx -> datsetId is not unique -> validation error
axios.head(request) const isNotUnique = !(res.status >= 200 && res.status < 300);
.then(() => { if (isNotUnique) resolve(false)
isUniqueID = false; } catch (error) {
}) // if 404 -> datasetId is unique
.catch((e) => { resolve(true);
isUniqueID = true;
});
} }
resolve(false)
}); });
return isUniqueID;
} }
function idformatvalid(node) { function idformatvalid(node) {
...@@ -73,7 +71,7 @@ function idformatvalid(node) { ...@@ -73,7 +71,7 @@ function idformatvalid(node) {
<FormKit v-if="!isEditMode || isDuplicate" type="text" name="datasetID" id="datasetID" <FormKit v-if="!isEditMode || isDuplicate" type="text" name="datasetID" id="datasetID"
:placeholder="$t(`message.dataupload.datasets.datasetID.label`)" :placeholder="$t(`message.dataupload.datasets.datasetID.label`)"
:info="$t(`message.dataupload.datasets.datasetID.info`)" :help="$t(`message.dataupload.datasets.datasetID.help`)" :info="$t(`message.dataupload.datasets.datasetID.info`)" :help="$t(`message.dataupload.datasets.datasetID.help`)"
:validation-rules="{ idformatvalid, idunique }" validation="idformatvalid|idunique|required" :validation-rules="{ idformatvalid, idunique }" validation="required|idformatvalid|(900)idunique"
validation-visibility="live" :validation-messages="validationMessages" outer-class="formkitCmpWrap p-3"> validation-visibility="live" :validation-messages="validationMessages" outer-class="formkitCmpWrap p-3">
</FormKit> </FormKit>
<FormKit v-else type="text" name="datasetID" id="datasetID" :disabled="true" <FormKit v-else type="text" name="datasetID" id="datasetID" :disabled="true"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment