Merge branch 'dev' into feature/106-password_strength
This commit is contained in:
		@@ -12,6 +12,7 @@
 | 
			
		||||
  import Select from "svelte-select";
 | 
			
		||||
  import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
 | 
			
		||||
  import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
 | 
			
		||||
  import { tick } from "svelte";
 | 
			
		||||
  $: delete_triggered = false;
 | 
			
		||||
  $: address_valid_or_none =
 | 
			
		||||
    (isAddress1Valid && iszipcodevalid && iscityvalid) ||
 | 
			
		||||
@@ -20,6 +21,9 @@
 | 
			
		||||
  let original = "";
 | 
			
		||||
  let original_object = {};
 | 
			
		||||
  let contacts = [];
 | 
			
		||||
  let valueCopy = null;
 | 
			
		||||
  let areaDom;
 | 
			
		||||
  let copied = false;
 | 
			
		||||
  export let params;
 | 
			
		||||
  $: editable = {};
 | 
			
		||||
  $: contact = {};
 | 
			
		||||
@@ -31,6 +35,7 @@
 | 
			
		||||
  $: sponsoring_contracts_show = true;
 | 
			
		||||
  $: cards_show = true;
 | 
			
		||||
  $: generate_orgs = [original_object];
 | 
			
		||||
  $: registrationLink = `${config.baseurl}/selfservice/register/${editable.registrationKey}`;
 | 
			
		||||
  const getContactLabel = (option) =>
 | 
			
		||||
    option.firstname + " " + (option.middlename || "") + " " + option.lastname;
 | 
			
		||||
  const promise = RunnerOrganizationService.runnerOrganizationControllerGetOne(
 | 
			
		||||
@@ -98,6 +103,7 @@
 | 
			
		||||
        postdata
 | 
			
		||||
      )
 | 
			
		||||
        .then((resp) => {
 | 
			
		||||
          editable.registrationKey = resp.registrationKey;
 | 
			
		||||
          original_object = Object.assign({}, editable);
 | 
			
		||||
          original = JSON.stringify(original_object);
 | 
			
		||||
          Toastify({
 | 
			
		||||
@@ -110,9 +116,46 @@
 | 
			
		||||
    } else {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  async function copy() {
 | 
			
		||||
    if(!editable.registrationKey){
 | 
			
		||||
      Toastify({
 | 
			
		||||
        text: $_('you-have-to-save-your-changes-to-generate-a-link'),
 | 
			
		||||
        duration: 500,
 | 
			
		||||
        backgroundColor:
 | 
			
		||||
          "linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
 | 
			
		||||
      }).showToast();
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    valueCopy = registrationLink;
 | 
			
		||||
    await tick();
 | 
			
		||||
    areaDom.focus();
 | 
			
		||||
    areaDom.select();
 | 
			
		||||
    try {
 | 
			
		||||
      const successful = document.execCommand("copy");
 | 
			
		||||
      if (!successful) {
 | 
			
		||||
        throw new Error();
 | 
			
		||||
      }
 | 
			
		||||
      Toastify({
 | 
			
		||||
        text: $_("copied-link-to-clipboard"),
 | 
			
		||||
        duration: 500,
 | 
			
		||||
        backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
 | 
			
		||||
      }).showToast();
 | 
			
		||||
      copied = true;
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
      Toastify({
 | 
			
		||||
        text: $_("error-whyile-copying-to-clipboard"),
 | 
			
		||||
        duration: 500,
 | 
			
		||||
        backgroundColor:
 | 
			
		||||
          "linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
 | 
			
		||||
      }).showToast();
 | 
			
		||||
    }
 | 
			
		||||
    // we can notifi by event or storage about copy status
 | 
			
		||||
    valueCopy = null;
 | 
			
		||||
  }
 | 
			
		||||
  export let import_modal_open = false;
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
{#if valueCopy != null}<textarea bind:this={areaDom}>{valueCopy}</textarea>{/if}
 | 
			
		||||
<ImportRunnerModal
 | 
			
		||||
  on:cancelDelete={(event) => {
 | 
			
		||||
    import_modal_open = false;
 | 
			
		||||
@@ -275,99 +318,151 @@
 | 
			
		||||
        on:select={(selectedValue) => (editable.contact = selectedValue.detail.value)}
 | 
			
		||||
        on:clear={() => (editable.contact = null)} />
 | 
			
		||||
    </div>
 | 
			
		||||
    <!--  -->
 | 
			
		||||
    <div class="flex items-start mt-2">
 | 
			
		||||
      <div class="flex items-center h-5">
 | 
			
		||||
        <input
 | 
			
		||||
          bind:checked={editable.address_checked}
 | 
			
		||||
          id="comments"
 | 
			
		||||
          name="comments"
 | 
			
		||||
          type="checkbox"
 | 
			
		||||
          class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" />
 | 
			
		||||
    <div>
 | 
			
		||||
      <div class="flex items-start mt-2">
 | 
			
		||||
        <div class="flex items-center h-5">
 | 
			
		||||
          <input
 | 
			
		||||
            bind:checked={editable.registrationEnabled}
 | 
			
		||||
            id="comments"
 | 
			
		||||
            name="comments"
 | 
			
		||||
            type="checkbox"
 | 
			
		||||
            class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" />
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="ml-3 text-sm">
 | 
			
		||||
          <label
 | 
			
		||||
            for="comments"
 | 
			
		||||
            class="font-medium text-gray-700">{$_('selfservice-registration')}</label>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="ml-3 text-sm">
 | 
			
		||||
        <label
 | 
			
		||||
          for="comments"
 | 
			
		||||
          class="font-medium text-gray-700">{$_('address')}</label>
 | 
			
		||||
      <div>
 | 
			
		||||
        {#if editable.registrationEnabled}
 | 
			
		||||
          <div class="text-sm w-full">
 | 
			
		||||
            <div on:click={copy} class="inline-flex w-full">
 | 
			
		||||
              <p
 | 
			
		||||
                name="token"
 | 
			
		||||
                class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 p-2">
 | 
			
		||||
                {#if editable.registrationKey}
 | 
			
		||||
                {registrationLink}
 | 
			
		||||
                {:else}
 | 
			
		||||
                {$_('you-have-to-save-your-changes-to-generate-a-link')}
 | 
			
		||||
                {/if}
 | 
			
		||||
              </p>
 | 
			
		||||
              <div
 | 
			
		||||
                class="bg-gray-200 border-gray-300 border-t border-b border-r text-black rounded-r-md sm:text-sm p-2 mt-1 cursor-pointer">
 | 
			
		||||
                <svg
 | 
			
		||||
                  xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
                  viewBox="0 0 24 24"
 | 
			
		||||
                  width="24"
 | 
			
		||||
                  height="24"><path fill="none" d="M0 0h24v24H0z" />
 | 
			
		||||
                  <path
 | 
			
		||||
                    fill="currentColor"
 | 
			
		||||
                    d="M7 4V2h10v2h3l1 1v16a1 1 0 01-1 1H4a1 1 0 01-1-1V5l1-1h3zm0 2H5v14h14V6h-2v2H7V6zm2-2v2h6V4H9z" /></svg>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            {#if editable.registrationKey}
 | 
			
		||||
            <p class="text-gray-500 text-xs">
 | 
			
		||||
              {$_('click-to-copy-the-link-into-your-clipboard')}
 | 
			
		||||
            </p>
 | 
			
		||||
            {/if}
 | 
			
		||||
          </div>
 | 
			
		||||
        {/if}
 | 
			
		||||
        <!--  -->
 | 
			
		||||
        <div>
 | 
			
		||||
          <div class="flex items-start mt-2">
 | 
			
		||||
            <div class="flex items-center h-5">
 | 
			
		||||
              <input
 | 
			
		||||
                bind:checked={editable.address_checked}
 | 
			
		||||
                id="comments"
 | 
			
		||||
                name="comments"
 | 
			
		||||
                type="checkbox"
 | 
			
		||||
                class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" />
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="ml-3 text-sm">
 | 
			
		||||
              <label
 | 
			
		||||
                for="comments"
 | 
			
		||||
                class="font-medium text-gray-700">{$_('address')}</label>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        {#if editable.address_checked === true}
 | 
			
		||||
          <div class="col-span-6">
 | 
			
		||||
            <label
 | 
			
		||||
              for="address1"
 | 
			
		||||
              class="block text-sm font-medium text-gray-700">{$_('address')}</label>
 | 
			
		||||
            <input
 | 
			
		||||
              autocomplete="off"
 | 
			
		||||
              placeholder="Address"
 | 
			
		||||
              class:border-red-500={!isAddress1Valid}
 | 
			
		||||
              class:focus:border-red-500={!isAddress1Valid}
 | 
			
		||||
              class:focus:ring-red-500={!isAddress1Valid}
 | 
			
		||||
              bind:value={editable.address.address1}
 | 
			
		||||
              type="text"
 | 
			
		||||
              name="address1"
 | 
			
		||||
              class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
 | 
			
		||||
            {#if !isAddress1Valid}
 | 
			
		||||
              <span
 | 
			
		||||
                class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
 | 
			
		||||
                {$_('address-is-required')}
 | 
			
		||||
              </span>
 | 
			
		||||
            {/if}
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="col-span-6">
 | 
			
		||||
            <label
 | 
			
		||||
              for="address2"
 | 
			
		||||
              class="block text-sm font-medium text-gray-700">{$_('apartment-suite-etc')}</label>
 | 
			
		||||
            <input
 | 
			
		||||
              autocomplete="off"
 | 
			
		||||
              placeholder={$_('apartment-suite-etc')}
 | 
			
		||||
              bind:value={editable.address.address2}
 | 
			
		||||
              type="text"
 | 
			
		||||
              name="address2"
 | 
			
		||||
              class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="col-span-6">
 | 
			
		||||
            <label
 | 
			
		||||
              for="zipcode"
 | 
			
		||||
              class="block text-sm font-medium text-gray-700">{$_('zip-postal-code')}</label>
 | 
			
		||||
            <input
 | 
			
		||||
              autocomplete="off"
 | 
			
		||||
              placeholder={$_('zip-postal-code')}
 | 
			
		||||
              class:border-red-500={!iszipcodevalid}
 | 
			
		||||
              class:focus:border-red-500={!iszipcodevalid}
 | 
			
		||||
              class:focus:ring-red-500={!iszipcodevalid}
 | 
			
		||||
              bind:value={editable.address.postalcode}
 | 
			
		||||
              type="text"
 | 
			
		||||
              name="zipcode"
 | 
			
		||||
              class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
 | 
			
		||||
            {#if !iszipcodevalid}
 | 
			
		||||
              <span
 | 
			
		||||
                class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
 | 
			
		||||
                {$_('valid-zipcode-postal-code-is-required')}
 | 
			
		||||
              </span>
 | 
			
		||||
            {/if}
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="col-span-6">
 | 
			
		||||
            <label
 | 
			
		||||
              for="city"
 | 
			
		||||
              class="block text-sm font-medium text-gray-700">{$_('city')}</label>
 | 
			
		||||
            <input
 | 
			
		||||
              autocomplete="off"
 | 
			
		||||
              placeholder={$_('city')}
 | 
			
		||||
              class:border-red-500={!iscityvalid}
 | 
			
		||||
              class:focus:border-red-500={!iscityvalid}
 | 
			
		||||
              class:focus:ring-red-500={!iscityvalid}
 | 
			
		||||
              bind:value={editable.address.city}
 | 
			
		||||
              type="text"
 | 
			
		||||
              name="city"
 | 
			
		||||
              class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
 | 
			
		||||
            {#if !iscityvalid}
 | 
			
		||||
              <span
 | 
			
		||||
                class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
 | 
			
		||||
                {$_('valid-city-is-required')}
 | 
			
		||||
              </span>
 | 
			
		||||
            {/if}
 | 
			
		||||
          </div>
 | 
			
		||||
        {/if}
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    {#if editable.address_checked === true}
 | 
			
		||||
      <div class="col-span-6">
 | 
			
		||||
        <label
 | 
			
		||||
          for="address1"
 | 
			
		||||
          class="block text-sm font-medium text-gray-700">{$_('address')}</label>
 | 
			
		||||
        <input
 | 
			
		||||
          autocomplete="off"
 | 
			
		||||
          placeholder="Address"
 | 
			
		||||
          class:border-red-500={!isAddress1Valid}
 | 
			
		||||
          class:focus:border-red-500={!isAddress1Valid}
 | 
			
		||||
          class:focus:ring-red-500={!isAddress1Valid}
 | 
			
		||||
          bind:value={editable.address.address1}
 | 
			
		||||
          type="text"
 | 
			
		||||
          name="address1"
 | 
			
		||||
          class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
 | 
			
		||||
        {#if !isAddress1Valid}
 | 
			
		||||
          <span
 | 
			
		||||
            class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
 | 
			
		||||
            {$_('address-is-required')}
 | 
			
		||||
          </span>
 | 
			
		||||
        {/if}
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="col-span-6">
 | 
			
		||||
        <label
 | 
			
		||||
          for="address2"
 | 
			
		||||
          class="block text-sm font-medium text-gray-700">{$_('apartment-suite-etc')}</label>
 | 
			
		||||
        <input
 | 
			
		||||
          autocomplete="off"
 | 
			
		||||
          placeholder={$_('apartment-suite-etc')}
 | 
			
		||||
          bind:value={editable.address.address2}
 | 
			
		||||
          type="text"
 | 
			
		||||
          name="address2"
 | 
			
		||||
          class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="col-span-6">
 | 
			
		||||
        <label
 | 
			
		||||
          for="zipcode"
 | 
			
		||||
          class="block text-sm font-medium text-gray-700">{$_('zip-postal-code')}</label>
 | 
			
		||||
        <input
 | 
			
		||||
          autocomplete="off"
 | 
			
		||||
          placeholder={$_('zip-postal-code')}
 | 
			
		||||
          class:border-red-500={!iszipcodevalid}
 | 
			
		||||
          class:focus:border-red-500={!iszipcodevalid}
 | 
			
		||||
          class:focus:ring-red-500={!iszipcodevalid}
 | 
			
		||||
          bind:value={editable.address.postalcode}
 | 
			
		||||
          type="text"
 | 
			
		||||
          name="zipcode"
 | 
			
		||||
          class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
 | 
			
		||||
        {#if !iszipcodevalid}
 | 
			
		||||
          <span
 | 
			
		||||
            class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
 | 
			
		||||
            {$_('valid-zipcode-postal-code-is-required')}
 | 
			
		||||
          </span>
 | 
			
		||||
        {/if}
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="col-span-6">
 | 
			
		||||
        <label
 | 
			
		||||
          for="city"
 | 
			
		||||
          class="block text-sm font-medium text-gray-700">{$_('city')}</label>
 | 
			
		||||
        <input
 | 
			
		||||
          autocomplete="off"
 | 
			
		||||
          placeholder={$_('city')}
 | 
			
		||||
          class:border-red-500={!iscityvalid}
 | 
			
		||||
          class:focus:border-red-500={!iscityvalid}
 | 
			
		||||
          class:focus:ring-red-500={!iscityvalid}
 | 
			
		||||
          bind:value={editable.address.city}
 | 
			
		||||
          type="text"
 | 
			
		||||
          name="city"
 | 
			
		||||
          class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
 | 
			
		||||
        {#if !iscityvalid}
 | 
			
		||||
          <span
 | 
			
		||||
            class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
 | 
			
		||||
            {$_('valid-city-is-required')}
 | 
			
		||||
          </span>
 | 
			
		||||
        {/if}
 | 
			
		||||
      </div>
 | 
			
		||||
    {/if}
 | 
			
		||||
  </section>
 | 
			
		||||
{:else}
 | 
			
		||||
  {#await promise}
 | 
			
		||||
 
 | 
			
		||||
@@ -23,14 +23,14 @@
 | 
			
		||||
        throw new Error();
 | 
			
		||||
      }
 | 
			
		||||
      Toastify({
 | 
			
		||||
        text: $_('copied-token-to-clipboard'),
 | 
			
		||||
        text: $_("copied-token-to-clipboard"),
 | 
			
		||||
        duration: 500,
 | 
			
		||||
        backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
 | 
			
		||||
      }).showToast();
 | 
			
		||||
      copied = true;
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
      Toastify({
 | 
			
		||||
        text: $_('error-whyile-copying-to-clipboard'),
 | 
			
		||||
        text: $_("error-whyile-copying-to-clipboard"),
 | 
			
		||||
        duration: 500,
 | 
			
		||||
        backgroundColor:
 | 
			
		||||
          "linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
 | 
			
		||||
@@ -75,7 +75,9 @@
 | 
			
		||||
                  d="M4 5v11h16V5H4zM2 4a1 1 0 011-1h18a1 1 0 011 1v14H2V4zM1 19h22v2H1v-2z" /></svg>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
 | 
			
		||||
              <h3 class="text-lg leading-6 font-medium text-gray-900">{$_('token')}</h3>
 | 
			
		||||
              <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
			
		||||
                {$_('token')}
 | 
			
		||||
              </h3>
 | 
			
		||||
              <div class="mt-2 mb-6">
 | 
			
		||||
                <p class="text-sm text-gray-500">
 | 
			
		||||
                  {$_('the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again')}
 | 
			
		||||
@@ -106,7 +108,9 @@
 | 
			
		||||
                        d="M7 4V2h10v2h3l1 1v16a1 1 0 01-1 1H4a1 1 0 01-1-1V5l1-1h3zm0 2H5v14h14V6h-2v2H7V6zm2-2v2h6V4H9z" /></svg>
 | 
			
		||||
                  </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <p class="text-gray-500 text-xs">{$_('click-to-copy-token-to-clipboard')}</p>
 | 
			
		||||
                <p class="text-gray-500 text-xs">
 | 
			
		||||
                  {$_('click-to-copy-token-to-clipboard')}
 | 
			
		||||
                </p>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user