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;
const store = useStore();
const dpiContext = useDpiContext();
const isDuplicate = ref();
const isDuplicate = ref(localStorage.getItem('dpi_duplicate') || false);
const isEditMode = computed(() => !!dpiContext.value.edit?.enabled)
isDuplicate.value = localStorage.getItem('dpi_duplicate');
const { t, locale } = useI18n({ useScope: 'global' });
......@@ -31,34 +30,33 @@ onMounted(() => {
validationMessages.value.required = t('message.dataupload.datasets.datasetID.required');
});
watchEffect(() => {
});
async function idunique(node) {
let isUniqueID = true;
let hubUrl = env.api.hubUrl;
const draftIDs = store.getters['auth/getUserDraftIds'];
new Promise(() => {
if (isNil(node.value) || node.value === '' || node.value === undefined) isUniqueID = true;
else if (draftIDs.includes(node.value)) isUniqueID = false;
else {
const request = `${hubUrl}datasets/${node.value}?useNormalizedId=true`;
axios.head(request)
.then(() => {
isUniqueID = false;
})
.catch((e) => {
isUniqueID = true;
});
const draftIDs = store.getters['auth/getUserDraftIds'];
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
if (isNil(id) || id === '' || id === undefined) resolve(true)
const existIdInUserDrafts = draftIDs?.includes(id)
if (existIdInUserDrafts) resolve(false)
const request = `${hubUrl}datasets/${id}?useNormalizedId=true`;
try {
const res = await axios.head(request);
// if 2xx -> datsetId is not unique -> validation error
const isNotUnique = !(res.status >= 200 && res.status < 300);
if (isNotUnique) resolve(false)
} catch (error) {
// if 404 -> datasetId is unique
resolve(true);
}
resolve(false)
});
return isUniqueID;
}
function idformatvalid(node) {
......@@ -73,7 +71,7 @@ function idformatvalid(node) {
<FormKit v-if="!isEditMode || isDuplicate" type="text" name="datasetID" id="datasetID"
:placeholder="$t(`message.dataupload.datasets.datasetID.label`)"
: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">
</FormKit>
<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