| <script setup>
import { __ } from '@wordpress/i18n';
</script>
<template>
  <div class="settings-form">
    <form
      method="post"
      @submit="onSubmit"
    >
      <!-- Section 1 -->
      <div class="section">
        <BaseCard
          :header-title="__('General', 'wp-emailer')"
          :header-description="__('Change general contents for the settings', 'wp-emailer')"
        >
          <template #content>
            <InputSection
              type="number"
              :label="__('Number of rows', 'wp-emailer')"
              name="numrows"
              :hint="__('How many rows will be displayed on the table', 'wp-emailer')"
              :value="settings?.numrows"
              :required="true"
              :on-change="changeInput"
              :min="1"
              :max="5"
            />
            <InputSection
              type="switch"
              :label="__('Show human readable date', 'wp-emailer')"
              name="humandate"
              :value="settings?.humandate"
              :hint="__('If the date in the table will be displayed as a human readable format or a timestamp', 'wp-emailer')"
              :required="false"
              :on-change="changeInput"
            />
          </template>
        </BaseCard>
      </div>
      <!-- Section 2 -->
      <div class="section">
        <BaseCard
          :header-title="__('Email', 'wp-emailer')"
          :header-description="__('Change your email settings', 'wp-emailer')"
        >
          <template #content>
            <InputSection
              type="email"
              :label="__('Emails', 'wp-emailer')"
              name="emails"
              :on-change="changeInput"
            >
              <template #input-content>
                <BaseButton
                  v-if="!emailsData.length"
                  :onclick="appendEmail"
                  type="button"
                  variant="default"
                  class="email-append-button"
                >
                  + {{ __('Add New', 'wp-emailer') }}
                </BaseButton>
                <div
                  v-for="(email, index) in emailsData"
                  :key="index"
                >
                  <div class="mt-20 flex">
                    <BaseInput
                      type="email"
                      :name="`emails_${index}`"
                      :value="email"
                      :on-change="(input) => changeEmailInput(input, index)"
                    />
                    <BaseButton
                      v-if="emailsData.length < 5 && !index"
                      :onclick="appendEmail"
                      type="button"
                      variant="default"
                      class="email-append-button"
                    >
                      +
                    </BaseButton>
                    <BaseButton
                      type="button"
                      :onclick="() => deleteEmail(index)"
                      variant="error"
                      class="email-append-button"
                    >
                      -
                    </BaseButton>
                  </div>
                </div>
              </template>
            </InputSection>
          </template>
        </BaseCard>
      </div>
    </form>
  </div>
</template>
<script>
import BaseCard from "../card/BaseCard.vue";
import BaseButton from "../../components/button/BaseButton.vue";
import InputSection from "../../components/input/InputSection.vue";
import BaseInput from "../../components/input/BaseInput.vue";
export default {
    name: "SettingForm",
    components: {
        BaseCard,
        BaseButton,
        InputSection,
        BaseInput
    },
    props: {
        change: {
            type: Function,
            required: true,
        },
        settings: {
            type: Object,
            required: true,
        }
    },
    data() {
        return {
            emailsData: [...this.settings.emails]
        };
    },
    methods: {
        changeInput(input) {
            this.change(input);
        },
        changeEmailInput(input, index) {
            this.emailsData[index] = input.value;
            this.saveEmails();
        },
        appendEmail() {
            this.emailsData.push('');
        },
        deleteEmail(index) {
            this.emailsData.splice(index, 1);
            this.saveEmails();
        },
        saveEmails() {
            this.change({
                key: 'emails',
                value: !this.emailsData.length ? '' : this.emailsData
            });
        },
        onSubmit(e) {
            e.preventDefault();
            // We don't make full-form submission's here.
            // We've added single column wise saving on change-input.
        },
    },
};
</script>
<style lang="scss" scoped>
.settings-form {
  .section-save {
    margin-top: 40px;
  }
  .email-append-button {
    margin-left: 20px;
    padding: 10px 10px;
  }
}
</style>
 |