Example of Search component using a custom service: EDR API

This example uses a custom search service, created in the /usr/services/edr directory and implementing the search service interface

<Search
  limitTo="advanced"
  source={{
        customApi: {
          formatUrl: uiFilter=>{const{conn,inputs}=uiFilter;let ret={sourceUrl:"http://www.edr-edr.it/edr_programmi/edr_api.php?ancient_city=roma",options:{}};// ๐Ÿ”น Processa i filtri avanzati con form2querystring
    const filterQuery=edr_form2querystring(conn,inputs);// ๐Ÿ”น Verifica che ci siano filtri validi
    if(filterQuery&&Object.keys(filterQuery).length>0){const serializedQuery=Object.entries(filterQuery).map(([key,value])=>`${key}=${encodeURIComponent(value)}`).join("&");ret.sourceUrl+=`&${serializedQuery}`;}// ๐Ÿ”น LOG della URL generata
    console.log("Generated URL:",ret.sourceUrl);return ret;},
          parseResponse: async response=>{try{const output=await response.json();// ๐Ÿ”น Se la risposta API รจ vuota, restituisce un array vuoto senza errori
    if(!output||output.results&&output.results.length===0){console.warn("No result found");return[];}// ๐Ÿ”น Determina i risultati di base (usa `results` per EDR)
    let allResults=output.results||output;// ๐Ÿ”น Filtra i record che contengono "ignoratur", "Roma?"
    allResults=allResults.filter(item=>{var _item$localization;const loc=(((_item$localization=item.localization)===null||_item$localization===void 0?void 0:_item$localization.discovery_location)||"").toLowerCase();return!loc.includes("ignoratur")&&!loc.includes("roma?");});// ๐Ÿ”น Se dopo il filtro non rimangono risultati, mostra un avviso ma non genera un errore
    if(allResults.length===0){console.warn("No result found.");return[];}return allResults;}catch(error){console.error("Errore durante il parsing della risposta API:",error);return[];// ๐Ÿ”น Evita il crash restituendo un array vuoto
    }},
          form2querystring: (conn,plain)=>{if(!plain||plain.length===0){return{};// ๐Ÿ”น Ritorna un oggetto vuoto se non ci sono filtri
    }const edrQuery={};// ๐Ÿ”น Applica gli operatori speciali per l'API EDR
    plain.forEach(({field,operator,value})=>{if(field&&value!=null){if(operator==="_gte"){edrQuery[field]=`>${value}`;}else if(operator==="_lte"){edrQuery[field]=`<${value}`;}else{edrQuery[field]=value;// ๐Ÿ”น Operatore di default "="
    }}});return edrQuery;}
        }
      }}
  operators={{
        _contains: "Contains",
        _gte: "Greater or Equal",
        _lte: "Less or Equal"
      }}
  fieldList={{
        text: "Text",
        record_number: "Record number",
        discovery_location: "Discovery location",
        inscription_type: {
          label: "Inscription type",
          values: [
            "sacer",
            "cetera",
            "fasti, leges, acta",
            "honorarius",
            "ignoratur",
            "inscr. parietariae",
            "oper. publ. priv.que",
            "sepulcralis",
            "term. non sep.",
            "tit. in artis operib. inscr."
          ]
        },
        material: {
          label: "Material (Rei materia)",
          values: [
            "aes",
            "arenatum",
            "argentum",
            "aurum",
            "cera",
            "ceterum",
            "creta",
            "eburneus",
            "ferrum",
            "ignoratur",
            "lapis",
            "lignum",
            "marmor",
            "musivum",
            "plumbum",
            "tectorium",
            "vitrum"
          ]
        },
        language: {
          label: "Language (Lingua)",
          values: [
            "latina",
            "graeca",
            "latina-graeca",
            "incerta",
            "ignoratur",
            "alia"
          ]
        },
        religion: {
          label: "Religion (Religione)",
          values: [
            "Christiana",
            "Hebraica",
            "Pagana",
            "Incerta"
          ]
        },
        type_of_persons_mentionated: {
          label: "Type of persons mentionated (Virorum distributio)",
          values: [
            "imp.",
            "reges, viri notab. exter. gent.",
            "ord. sen.",
            "ord. eq.",
            "ord. mun.",
            "mil.",
            "eccl.",
            "offic. magg., Augg., mun.",
            "offic. pag., vic., colleg.",
            "offic. priv.",
            "cet.",
            "ignoratur",
            "imp.?",
            "reges, viri notab. exter. gent.?",
            "ord. sen.?",
            "ord. eq.?",
            "ord. mun.?",
            "mil.?",
            "eccl.?",
            "offic. magg., Augg., mun.?",
            "offic. pag., vic., colleg.?",
            "offic. priv.?",
            "cet.?"
          ]
        },
        year_from: {
          label: "Year from",
          operator: "_gte"
        },
        year_to: {
          label: "Year to",
          operator: "_lte"
        }
      }}
  resultItemTemplate={item=>
    <div
    className="card my-3"
    key={item.identification.record_number}>
    <div className="card-body">
      <h5 className="card-title">{item.identification.record_number} โ€” {item.localization.discovery_location}</h5>
      <a
      href={item.identification.url}
      target="_blank">{item.identification.url}</a>
      <pre className="mt-2 ps-5">{item.text.text.replace(/\<br\>/gi,"\n")}</pre>
    </div>
    </div>}
/>
LAD: Laboratorio di Archeologia Digitale alla Sapienza

Built with โ™ฅ with s:CMS v5.5.2 by LAD @Sapienza
Codeย |ย Issues

s:CMS รจ un progetto ideato e sviluppato dal
LAD: Laboratorio di Archeologia Digitale alla Sapienza
Codeย |ย Issues