diff --git a/src/core/js/edit_mode.js b/src/core/js/edit_mode.js index 5cde9729e69da8a3f7b31103ff817035ec950b3f..d4e5f189a0a0e16db0ef2c021fd2e396650a18eb 100644 --- a/src/core/js/edit_mode.js +++ b/src/core/js/edit_mode.js @@ -1867,11 +1867,11 @@ var edit_mode = new function () { * which can be referenced by the property. */ this.retrieve_datatype_list = async function (datatype) { - var find_entity = ["FILE", "REFERENCE"].includes(datatype) ? "" : `"${datatype}"`; + var find_entity = ["FILE", "REFERENCE"].includes(datatype)? "" : `"${datatype}"`; const max_options = 25; // TODO cache this? - var n_entities = datatype !== "FILE" ? $(await connection.get(`Entity/?query=COUNT RECORD ${find_entity}`)).find('Query').attr('results') : 0; - var n_files =$(await connection.get(`Entity/?query=COUNT FILE ${find_entity}`)).find('Query').attr('results'); + var n_entities = datatype !== "FILE" ? edit_mode.query(`COUNT Record ${find_entity}`, true) : 0; + var n_files =edit_mode.query(`COUNT File ${find_entity}`, true); var entities = datatype !== "FILE" ? edit_mode.query(`FIND Record ${find_entity}&P=0L${max_options}`, true) : []; var files = edit_mode.query(`FIND File ${find_entity}&P=0L${max_options}`, true); @@ -2128,11 +2128,16 @@ var edit_mode = new function () { const query_cache = {}; - this.query = (str, use_cache) => { + this.query = async (str, use_cache) => { if (use_cache && query_cache[str]) { return query_cache[str]; } - const result = query(str); + if (str.toUpperCase().startsWith('COUNT')){ + const res = await connection.get(`Entity/?query=${str}`); + const result = $(res).find('Query').attr('results') + } else { + const result = query(str); + } if (use_cache) { query_cache[str] = result; } diff --git a/test/core/js/modules/edit_mode.js.js b/test/core/js/modules/edit_mode.js.js index 2009ad0229ad1922d48fe24fcf3efb83b8dc227a..c6f3de7888a313c459fe4acc4812c50d1da9fec0 100644 --- a/test/core/js/modules/edit_mode.js.js +++ b/test/core/js/modules/edit_mode.js.js @@ -405,22 +405,12 @@ QUnit.test("retrieve_datatype_list", async function (assert) { var query_done; edit_mode.query = function (query) { - var re = /^FIND (Record|File) "IceCore"/g; + var re = /^(FIND|COUNT) (Record|File) "Ice Core"/g; assert.ok(query.match(re), `${query} should match ${re}`); query_done(); return []; } - query_done = assert.async(2); - await edit_mode.retrieve_datatype_list("IceCore"); - - - edit_mode.query = function (query) { - var re = /^FIND (Record|File) "Ice Core"/g; - assert.ok(query.match(re), `${query} should match ${re}`); - query_done(); - return []; - } - query_done = assert.async(2); + query_done = assert.async(4); await edit_mode.retrieve_datatype_list("Ice Core"); }); @@ -847,16 +837,16 @@ QUnit.test("_toggle_list_property", async function (assert) { QUnit.test("Bug #95", async function (assert) { var query_done; edit_mode.query = function (query) { - var re = /^FIND (Record|File)\s*$/g; + var re = /^(COUNT|FIND) (Record|File)\s*/g; assert.ok(query.match(re), `${query} should match ${re}`); query_done(); return []; } // retrieve_datatype_list calls edit_mode.query with correct query string. - query_done = assert.async(2); + query_done = assert.async(4); await edit_mode.retrieve_datatype_list("REFERENCE"); - query_done = assert.async(1); // only called with file + query_done = assert.async(2); // only called with file await edit_mode.retrieve_datatype_list("FILE"); var options = async () => { await sleep(100); return [$("<option>1234</option>")[0]]; };