Added constructor.js

This commit is contained in:
MaxOvs19 2023-02-16 17:32:08 +03:00
parent 2cd1920eb5
commit a3c433d328
8 changed files with 173 additions and 39 deletions

View File

@ -1,4 +1,5 @@
@import '/src/main.scss'; @import '/src/main.scss';
@import './src/constructor/constructor.scss';
* { * {
font-size: 14px; font-size: 14px;
@ -7,7 +8,13 @@
} }
.testClass { .testClass {
background-color: #ff8282; background-color: #8297ff;
color: white;
}
.listTest {
background-color: #8297ff;
border: 1px solid black;
color: white; color: white;
} }
@ -118,6 +125,7 @@
} }
&_submit { &_submit {
text-align: center;
width: 200px; width: 200px;
height: 35px; height: 35px;
border-radius: 10px; border-radius: 10px;
@ -219,6 +227,7 @@ pre {
} }
.check-code { .check-code {
text-align: center;
width: 200px; width: 200px;
height: 35px; height: 35px;
cursor: pointer; cursor: pointer;

View File

@ -260,13 +260,13 @@
<span class="code__keyword">const</span> <span class="code__var">newTheme</span> = { <span class="code__keyword">const</span> <span class="code__var">newTheme</span> = {
name: <span class="code__string">'test',</span> name: <span class="code__string">'test',</span>
styles: { styles: {
head: <span class="code__string">'testClass',</span> head: <span class="code__string">'headTestClass',</span>
list: <span class="code__string">'testClass',</span> , list: <span class="code__string">'listTestClass',</span> ,
placeholder: <span class="code__string">'testClass',</span> , placeholder: <span class="code__string">'placeholderTestClass',</span> ,
caret: <span class="code__string">'testClass',</span> , caret: <span class="code__string">'caretTestClass',</span> ,
search: <span class="code__string">'testClass',</span> , search: <span class="code__string">'searchTestClass',</span> ,
chips: <span class="code__string">'testClass',</span> , chips: <span class="code__string">'chipsTestClass',</span> ,
lable: <span class="code__string">'testClass',</span> , lable: <span class="code__string">'lableTestClass',</span> ,
}, },
}); });
</pre> </pre>
@ -277,13 +277,13 @@
<span class="code__keyword">const</span> <span class="code__var">newCustomTheme</span>:<span class="code__class"> CustomTheme</span> = { <span class="code__keyword">const</span> <span class="code__var">newCustomTheme</span>:<span class="code__class"> CustomTheme</span> = {
name: <span class="code__string">'test',</span> name: <span class="code__string">'test',</span>
styles: { styles: {
head: <span class="code__string">'testClass',</span> head: <span class="code__string">'headTestClass',</span>
list: <span class="code__string">'testClass',</span> , list: <span class="code__string">'listTestClass',</span> ,
placeholder: <span class="code__string">'testClass',</span> , placeholder: <span class="code__string">'placeholderTestClass',</span> ,
caret: <span class="code__string">'testClass',</span> , caret: <span class="code__string">'caretTestClass',</span> ,
search: <span class="code__string">'testClass',</span> , search: <span class="code__string">'searchTestClass',</span> ,
chips: <span class="code__string">'testClass',</span> , chips: <span class="code__string">'chipsTestClass',</span> ,
lable: <span class="code__string">'testClass',</span> , lable: <span class="code__string">'lableTestClass',</span> ,
}, },
}); });
</pre> </pre>
@ -292,12 +292,49 @@
<h6>CSS</h6> <h6>CSS</h6>
<code style="display: block; width: 44%"> <code style="display: block; width: 44%">
<pre> <pre>
.testClass { .headTestClass {
background-color: #ff8282; background-color: #8297ff;
color: white;
}
.listTestClass {
background-color: #8297ff;
border: 1px solid black;
color: white; color: white;
} }
</pre> </pre>
</code> </code>
<h6>Example custom theme in CG-Select</h6>
<p>
See an example of a select on
<a
href="https://codesandbox.io/p/sandbox/cg-select-example-eq9rle?file=%2Fsrc%2Findex.js"
style="font-size: 16px; color: #88d0f7"
>codesandbox.io</a
>
</p>
<div class="layout-select" style="margin-bottom: 60px">
<button class="cg-dropdown cg-dropdown_theme"></button>
</div>
</div>
</div>
<div class="example-select">
<h1 class="example-select_title">Select constructor</h1>
<div class="layout-select constructor">
<button class="cg-dropdown body"></button>
<textarea
name="styles"
id="styles"
cols="30"
rows="5"
class="textareaStyle"
placeholder="Enter CSS properties"
></textarea>
</div>
<div class="layout-select constructor">
<button class="cg-dropdown select"></button>
</div> </div>
</div> </div>

View File

@ -1,19 +1,8 @@
import { CGSelect } from '../src/cg-select'; import { CGSelect } from '../src/cg-select';
import './example'; import { newCustomTheme } from './src/themeTest';
// import { newCustomTheme } from './themeTest';
const newTheme = { import './src/example';
name: 'test', import './src/constructor/constructor';
styles: {
head: 'testClass',
list: 'testClass',
placeholder: 'testClass',
caret: 'testClass',
search: 'testClass',
chips: 'testClass',
lable: 'testClass',
},
};
// ------------------------------Обычный селект-------------------- // ------------------------------Обычный селект--------------------
const dropdown = new CGSelect({ const dropdown = new CGSelect({
@ -45,6 +34,30 @@ const dropdown = new CGSelect({
// console.log(`this state: ${e}`); // console.log(`this state: ${e}`);
// }); // });
const droptheme = new CGSelect({
selector: '.cg-dropdown_theme',
placeholder: 'Choose a car',
items: [
'BMW',
{
id: '213sade',
title: 'Opel',
value: 1,
},
'Mersedes',
'MAN',
'Ferari',
],
styles: {
head: {
width: '830px',
},
list: {
width: '824px',
},
},
theme: newCustomTheme,
});
// ------------------------------NativeSelect----------------------- // ------------------------------NativeSelect-----------------------
const dropdownNativeSelect = new CGSelect({ const dropdownNativeSelect = new CGSelect({
selector: '.cg-dropdown_selectNative', selector: '.cg-dropdown_selectNative',

View File

@ -0,0 +1,68 @@
import { CGSelect } from '../../../src/cg-select';
const body = new CGSelect({
selector: '.body',
placeholder: 'Select element to style',
items: ['head', 'list', 'placeholder', 'caret', 'search', 'chips', 'lable'],
});
const select = new CGSelect({
selector: '.select',
placeholder: 'Choose a car',
items: [
'BMW',
{
id: '213sade',
title: 'Opel',
value: 1,
},
'Mersedes',
'MAN',
'Ferari',
],
styles: {
head: {},
placeholder: {},
list: {},
caret: {},
chips: {},
search: {},
lable: {},
},
});
let valueSelect = '';
body.on('select', (e, value) => {
valueSelect = value;
getValueSelect(valueSelect);
});
function getValueSelect(value) {
switch (value) {
case 'head':
console.log('lol');
break;
case 'list':
break;
case 'placeholder':
break;
case 'caret':
break;
case 'search':
break;
case 'chips':
break;
case 'lable':
break;
default:
break;
}
}
let textarea = document.querySelector('#styles');
textarea.onkeyup = function () {
console.log(textarea.value);
};

View File

@ -0,0 +1,10 @@
.textareaStyle {
resize: none;
border-radius: 5px;
margin-left: 53px;
}
.constructor {
display: flex;
align-items: center;
}

View File

@ -4,11 +4,6 @@ export const newCustomTheme: CustomTheme = {
name: 'test', name: 'test',
styles: { styles: {
head: 'testClass', head: 'testClass',
list: 'testClass', list: 'listTest',
placeholder: 'testClass',
caret: 'testClass',
search: 'testClass',
chips: 'testClass',
lable: 'testClass',
}, },
}; };

View File

@ -917,17 +917,19 @@ export class CGSelect implements ICgSelect {
* @param callback * @param callback
* @method on * @method on
*/ */
public on(state: string, callback: (state: any) => any) { public on(state: string, callback: (state: any, value?: string) => any) {
const options = this.element?.querySelectorAll('.list__item'); const options = this.element?.querySelectorAll('.list__item');
let value = '';
switch (state) { switch (state) {
case 'select': case 'select':
options?.forEach((option: Element) => { options?.forEach((option: Element) => {
option.addEventListener('click', () => { option.addEventListener('click', () => {
console.log('option:select', option.textContent); console.log('option:select', option.textContent);
value = option.textContent!;
callback(state, value);
}); });
}); });
callback(state);
break; break;
case 'close': case 'close':
this.element!.addEventListener('click', () => { this.element!.addEventListener('click', () => {