Skip to content
Snippets Groups Projects
signUp.vue 4.99 KiB
Newer Older
<script setup lang="ts">
import AuthorizationForm from '@/modules/authorization/AuthorizationForm.vue';
import { useWebsocketStore } from '@/app/stores/websocket';

const websocketStore = useWebsocketStore();

const formData = ref({
  nick_name: '',
  email: '',
  password: '',
  first_name: '',
  middle_name: '',
  last_name: '',
  favorite_color: ''
});
const signUp = () => {
  if (!formData.value.favorite_color) {
    console.log('Выберите любимый цвет');
    return;
  }
  console.log('signUp!');
  // создание юзера в бд
  const favoriteColor = formData.value.favorite_color;
  delete formData.value.favorite_color;
  const userData = { ...formData.value, settings: { favorite_color: favoriteColor } };
  const dataCreateUser = {
    event: 'createUser',
    body: userData
  };
  websocketStore.sendData(dataCreateUser);
};

const colors = [
  'white',
  'slate',
  'blue',
  'sky',
  'teal',
  'lime',
  'green',
  'yellow',
  'orange',
  'pink',
  'fuchsia',
  'purple',
  'indigo',
  'rose',
  'red'
];
</script>

<template>
  <AuthorizationForm>
    <h2 class="text-center text-3xl font-bold mb-8 select-none">Register</h2>
    <form class="flex gap-24">
      <section>
        <label class="block redStar mb-1 pl-1 pointer-events-none select-none" for="nickName"
          >Nick name</label
        >
        <input
          id="nickName"
          v-model="formData.nick_name"
          style="border-width: 1px"
          class="input block p-1 px-2 mb-4 border-solid border-blue-300 rounded-md transition-all"
          type="text"
          placeholder="Enter your nick name"
          required
        />
        <label class="block redStar mb-1 pl-1 pointer-events-none select-none" for="email"
          >Email</label
        >
        <input
          id="email"
          v-model="formData.email"
          style="border-width: 1px"
          class="input block p-1 px-2 mb-4 border-solid border-blue-300 rounded-md transition-all"
          type="text"
          placeholder="Enter your email"
          required
        />
        <label class="block redStar mb-1 pl-1 pointer-events-none select-none" for="password"
          >Password</label
        >
        <input
          id="password"
          v-model="formData.password"
          style="border-width: 1px"
          class="input block p-1 px-2 mb-4 border-solid border-blue-300 rounded-md transition-all"
          type="password"
          placeholder="Enter your password"
          required
        />
      </section>
      <section>
        <label class="block mb-1 pl-1 pointer-events-none select-none" for="firstName"
          >First name</label
        >
        <input
          id="firstName"
          v-model="formData.first_name"
          style="border-width: 1px"
          class="input block p-1 px-2 mb-4 border-solid border-blue-300 rounded-md transition-all"
          type="text"
          placeholder="Enter your first name"
        />
        <label class="block mb-1 pl-1 pointer-events-none select-none" for="middleName"
          >Middle name</label
        >
        <input
          id="middleName"
          v-model="formData.middle_name"
          style="border-width: 1px"
          class="input block p-1 px-2 mb-4 border-solid border-blue-300 rounded-md transition-all"
          type="text"
          placeholder="Enter your middle name"
        />
        <label class="block mb-1 pl-1 pointer-events-none select-none" for="lastName"
          >Last name</label
        >
        <input
          id="lastName"
          v-model="formData.last_name"
          style="border-width: 1px"
          class="input block p-1 px-2 mb-4 border-solid border-blue-300 rounded-md transition-all"
          type="text"
          placeholder="Enter your last name"
        />
      </section>
      <section class="w-64 relative">
        <h3 class="font-bold w-full text-xl mb-4 select-none">Choose your favorite color:</h3>
        <ul class="grid grid-cols-5 gap-4 mb-6">
          <li
            v-for="item of colors"
            :key="item"
            :style="`background-color: ${item !== 'white' ? `var(--${item}-500)` : 'white'}`"
            :class="[
              `size-10 rounded-md border-2 border-${item === 'white' ? 'gray' : item}-100 border-solid cursor-pointer`,
              {
                'border-blue-800 border-4': formData.favorite_color === item
              }
            ]"
            @click.prevent="formData.favorite_color = item"
          ></li>
        </ul>
        <button
          class="absolute -right-10 -bottom-12 px-6 py-2 font-bold text-2xl bg-blue-700 border-2 border-solid border-blue-100 rounded-lg select-none"
          @click.prevent="signUp"
        >
          Sign up
        </button>
      </section>
    </form>
  </AuthorizationForm>
</template>

<style scoped>
.input:hover {
  border-color: var(--blue-500);
}
.input:focus {
  border-color: var(--blue-700);
}
.redStar::after {
  position: relative;
  right: -4px;
  top: 0;
  content: '*';
  font-weight: bold;
  color: var(--red-500);
}
</style>