# ZeenBlockCreateTable
Компонент ZeenBlockCreateTable
# Примеры:
Комнаты для общения со спикерами
На платформе вы можете проводить небольшие митапы со спикерами, делиться полезной информацией и получать обратную связьКомната 1 Заголовок
0 / 100 зрителейКомната 2 Заголовок
30 / 100 зрителейКомната 3 Заголовок
100 / 100 зрителей
# Source Code - исходный код компонента
<template>
<section class="create-table">
<ZeenContainer class="create-table__container">
<img v-if="src" class="create-table__bg" :src="src" />
<div class="create-table__header">
<ZeenHeadline class="create-table__title">
<slot name="title">
{{ title }}
</slot>
</ZeenHeadline>
<ZeenText class="create-table__description" v-if="description">
<slot name="description">
{{ description }}
</slot></ZeenText
>
</div>
<ul class="create-table__list-items">
<li class="create-table__item" v-for="(table, index) in dataTable" :key="table.table_id">
<ZeenListTableItem
ref="item"
:index="index"
:title="table.title"
:button="buttonJoin"
:table="table"
v-bind="attrListTableItem"
@join="joinTable"
/>
</li>
</ul>
<ZeenButton v-if="accessButton" @click.prevent="openModal" size="parentWidth">
<template v-slot:leftIcon>
<slot name="left-icon" />
</template>
<slot name="button">
{{ button }}
</slot>
</ZeenButton>
</ZeenContainer>
<client-only>
<ZeenModal class="modal" name="create-table-modal">
<template #title>
<slot name="modal-title">
{{ modalTitle }}
</slot>
</template>
<ZeenTextInput
class="modal__input"
v-model="fieldNameTable"
:error="fieldNameTableError"
:required="isNameTableRequired"
:placeholder="placeholderNameTable"
/>
<template #footer>
<ZeenButton
class="modal__button"
:is-loading="modalButton.isLoading"
@click.prevent="createTable"
size="parentWidth"
>
<slot name="modal-button">
{{ modalButton.button }}
</slot>
</ZeenButton>
</template>
</ZeenModal>
</client-only>
</section>
</template>
<script>
import ZeenHeadline from '../../components/ZeenHeadline/ZeenHeadline'
import ZeenButton from '../../components/ZeenButton/ZeenButton'
import ZeenContainer from '../../components/ZeenContainer/ZeenContainer'
import ZeenModal from '../../components/ZeenModal/ZeenModal'
import ZeenTextInput from '../../components/inputs/ZeenTextInput/ZeenTextInput'
import ZeenListTableItem from '../../components/ZeenListTableItem/ZeenListTableItem'
export default {
name: 'ZeenBlockCreateTable',
components: {ZeenListTableItem, ZeenTextInput, ZeenModal, ZeenContainer, ZeenButton, ZeenHeadline},
props: {
src: {
type: String,
},
title: {
type: String,
default: 'Комнаты для общения со спикерами',
},
description: {
type: String,
default:
'На платформе вы можете проводить небольшие митапы со спикерами, делиться полезной информацией и получать обратную связь',
},
button: {
type: String,
default: '+ Создать комнату',
},
accessButton: {
type: Boolean,
required: true,
},
modalTitle: {
type: String,
default: 'Создать комнату',
},
modalButton: {
type: Object,
require: true,
},
placeholderNameTable: {
type: String,
default: 'Введите название стола',
},
placeholderDescriptionTable: {
type: String,
default: 'Введите краткое описание стола',
},
isNameTableRequired: {
type: Boolean,
default: true,
},
isDescriptionTableRequired: {
type: Boolean,
default: true,
},
errorNameTable: {
type: String,
default: 'Поле не должно быть пустым',
},
errorDescriptionTable: {
type: String,
default: 'Поле не должно быть пустым',
},
attrListTableItem: {
type: Object,
},
dataTable: {
type: Array,
require: true,
},
buttonJoin: {
type: Object,
default: () => ({
fullTable: 'Стол переполнен',
table: 'Присоединиться',
loadingText: 'Загрузка...',
isLoading: false,
}),
},
},
data() {
return {
fieldNameTable: '',
fieldNameTableError: '',
}
},
methods: {
openModal() {
this.$vfm.show('create-table-modal')
},
closeModal() {
this.$vfm.hide('create-table-modal')
},
createTable() {
this.fieldNameTableError = this.fieldNameTable ? '' : this.errorNameTable
if (this.fieldNameTable) {
this.$emit('create-table', this.fieldNameTable)
}
},
joinTable(event) {
this.$emit('join', event)
},
returnComponent() {
//todo: Необходим для получения в родительском блоке доступ к методам компонента
return this.$refs.item
},
},
}
</script>
<style scoped lang="scss">
@import 'src/styles/mixins';
.create-table {
padding-top: var(--zeen-block-create-table-padding-top);
padding-bottom: var(--zeen-block-create-table-padding-bottom);
background: var(--zeen-block-create-table-background);
&__container {
position: relative;
}
&__bg {
position: absolute;
top: 0;
right: 0;
z-index: 0;
width: var(--zeen-block-create-table-bg-width);
height: auto;
@include phones {
display: none;
}
}
&__header {
width: var(--zeen-block-create-table-header-width);
display: flex;
flex-direction: column;
gap: var(--zeen-block-create-table-header-title-gap);
}
&__title {
font-weight: var(--zeen-block-create-table-title-weight);
font-size: var(--zeen-block-create-table-title-size);
line-height: var(--zeen-block-create-table-title-line-height);
color: var(--zeen-block-create-table-title);
}
&__description {
font-weight: var(--zeen-block-create-table-description-weight);
font-size: var(--zeen-block-create-table-description-size);
line-height: var(--zeen-block-create-table-description-line-height);
color: var(--zeen-block-create-table-description);
}
&__list-items {
padding: 0;
position: relative;
z-index: 1;
list-style: none;
margin-top: var(--zeen-block-create-table-list-items-margin-top);
margin-bottom: var(--zeen-block-create-table-list-items-margin-bottom);
}
&__item {
&:not(:last-child) {
margin-bottom: var(--zeen-block-create-table-item-margin-bottom);
}
}
}
.modal {
--modal-max-width-desktop: var(--zeen-block-create-table-modal-max-width);
::v-deep {
.modal {
&__content {
padding: 0;
padding-top: var(--zeen-block-create-table-modal-content-padding-top_size_xl);
overflow: hidden;
}
&__title {
text-align: center;
font-size: var(--zeen-block-create-table-modal-title-size);
line-height: var(--zeen-block-create-table-modal-title-line-height);
margin-bottom: var(--zeen-block-create-table-modal-title-margin-bottom_size_xl);
}
&__description {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
margin: 0;
padding: 0 var(--zeen-block-create-table-modal-content-padding-y_size_sm);
}
&__footer {
margin-top: var(--zeen-block-create-table-modal-footer-margin-top_size_xl);
}
}
}
&__input {
width: var(--zeen-block-create-table-modal-field_width_xl);
margin-bottom: var(--zeen-block-create-table-modal-field-margin-bottom_size_xl);
@include phones {
width: var(--zeen-block-create-table-modal-field_width_sm);
}
}
&__textarea {
width: var(--zeen-block-create-table-modal-field_width_xl);
@include phones {
width: var(--zeen-block-create-table-modal-field_width_sm);
}
}
&__button {
border-radius: 0;
}
}
</style>