Opetushallitus/eperusteet-opintopolku

View on GitHub
src/utils/murupolku.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { PerusteBaseDtoOpasTyyppiEnum } from '@shared/api/eperusteet';
import {
  isAmmatillinenKoulutustyyppi,
  isAmmatillinenKoulutustyyppiOrRyhma,
  koulutustyypinRyhma,
  yleissivistavatKoulutustyypit,
} from '@shared/utils/perusteet';
import _ from 'lodash';

// Murupolku opetussuunnitelmille ja toteutussuunnitelmille
export function createOpetussuunnitelmaMurupolku(ops, koulutustyyppi) {
  const polut: any = [];
  if (koulutustyyppi) {
    polut.push(murupolkuOpetussuunnitelmaRoot(koulutustyyppi));

    if (isAmmatillinenKoulutustyyppi(koulutustyyppi) && ops.peruste) {
      polut.push(murupolkuAmmatillinenKooste(ops.peruste));
    }

    polut.push(murupolkuTiedot(ops, koulutustyyppi));
  }
  return polut;
}

// Murupolku perusteille ja oppaille
export function createPerusteMurupolku(peruste, koulutustyyppi, routeKoulutustyyppi) {
  if (routeKoulutustyyppi === 'digiosaaminen') {
    return [];
  }

  if (peruste.opasTyyppi === _.toLower(PerusteBaseDtoOpasTyyppiEnum.TIETOAPALVELUSTA)) {
    return tietoapalvelustaMurupolut(peruste);
  }

  return [
    murupolkuPerusteRoot(koulutustyyppi, routeKoulutustyyppi),
    murupolkuPerusteTiedot(peruste, routeKoulutustyyppi),
  ];
}

function tietoapalvelustaMurupolut(peruste) {
  return [{
    label: peruste?.nimi,
  }];
}

export function murupolkuPerusteTiedot(peruste, koulutustyyppi) {
  return {
    label: peruste?.nimi,
    location: {
      name: 'perusteTiedot',
      params: {
        koulutustyyppi: koulutustyyppi,
        perusteId: peruste?.id,
      },
    },
  };
}

export function murupolkuAmmatillinenKooste(peruste) {
  return {
    label: peruste?.nimi,
    location: {
      name: 'ammatillinenkooste',
      params: {
        koulutustyyppi: 'ammatillinen',
        perusteId: peruste?.perusteId,
      },
    },
  };
}

export function murupolkuTiedot(ops, koulutustyyppi) {
  // opetussuunnitelma vai toteutussuunnitelma
  if (_.includes(yleissivistavatKoulutustyypit, koulutustyyppi)) {
    return murupolkuOpetussuunnitelma(ops, koulutustyyppi);
  }
  else {
    return murupolkuToteutussuunnitelma(ops, koulutustyyppi);
  }
}

export function murupolkuOpetussuunnitelma(ops, koulutustyyppi) {
  return {
    label: ops?.nimi,
    location: {
      name: 'opetussuunnitelmaTiedot',
      params: {
        koulutustyyppi: koulutustyypinRyhma(koulutustyyppi),
        opetussuunnitelmaId: _.toString(ops?.id),
      },
    },
  };
}

export function murupolkuToteutussuunnitelma(totsu, koulutustyyppi) {
  return {
    label: totsu?.nimi,
    location: {
      name: 'toteutussuunnitelmaTiedot',
      params: {
        koulutustyyppi: isAmmatillinenKoulutustyyppiOrRyhma(koulutustyyppi) ? 'ammatillinen' : koulutustyypinRyhma(koulutustyyppi),
        toteutussuunnitelmaId: _.toString(totsu?.id),
      },
    },
  };
}

export function murupolkuAmmatillinenRoot(koulutustyyppi) {
  return {
    label: koulutustyyppi,
    location: {
      name: 'ammatillinenSelaus',
      params: {
        koulutustyyppi: koulutustyyppi,
      },
    },
  };
}

export function murupolkuOpetussuunnitelmaRoot(koulutustyyppi) {
  return {
    label: koulutustyyppi,
    location: {
      name: isAmmatillinenKoulutustyyppiOrRyhma(koulutustyyppi) ? 'ammatillinenSelaus' : 'kooste',
    },
  };
}

export function murupolkuPerusteRoot(koulutustyyppi, routeKoulutustyyppi) {
  const kt = koulutustyyppi ? koulutustyypinRyhma(koulutustyyppi) : routeKoulutustyyppi;
  return {
    label: kt,
    location: {
      name: isAmmatillinenKoulutustyyppiOrRyhma(kt) ? 'ammatillinenSelaus' : 'kooste',
      params: {
        koulutustyyppi: kt,
      },
    },
  };
}

// Murupolku osaamismerkeille
export function murupolkuOsaamismerkkiRoot(koulutustyyppi) {
  return [{
    label: koulutustyyppi,
    location: {
      name: 'kooste',
      params: {
        koulutustyyppi: koulutustyyppi,
      },
    },
  }, {
    label: 'kansalliset-perustaitojen-osaamismerkit',
    location: {
      name: 'osaamismerkit',
    },
  }];
}

export function murupolkuOsaamismerkkiTiedot(koulutustyyppi, osaamismerkki) {
  return [
    ...murupolkuOsaamismerkkiRoot(koulutustyyppi),
    {
      label: osaamismerkki?.nimi,
    },
  ];
}

export function murupolkuKoulutuksenJarjestaja(koulutustyyppi, koulutustoimija) {
  return [
    {
      label: 'ammatillinen-koulutus',
      location: {
        name: 'ammatillinenSelaus',
        params: {
          koulutustyyppi: koulutustyyppi,
        },
      },
    },
    {
      label: 'koulutuksen-jarjestajat',
      location: {
        name: 'ammatillinenKoulutuksenjarjestajat',
        params: {
          koulutustyyppi: koulutustyyppi,
        },
      },
    },
    {
      label: koulutustoimija?.nimi,
    },
  ];
}