diff --git a/packages/theme/styles/_layouts.scss b/packages/theme/styles/_layouts.scss index 29a8e54ab5..5f9e52df43 100644 --- a/packages/theme/styles/_layouts.scss +++ b/packages/theme/styles/_layouts.scss @@ -161,6 +161,8 @@ table { .step-tb75 + .step-tb75 { margin-top: .75rem; } .ml-2 { margin-left: .5rem; } +.mt-5 { margin-top: 1.25rem; } +.mb-1 { margin-bottom: .25rem; } /* --------- */ .relative { position: relative; } diff --git a/plugins/recruit-resources/src/components/CreateCandidate.svelte b/plugins/recruit-resources/src/components/CreateCandidate.svelte index 62412f5158..dde30cef6c 100644 --- a/plugins/recruit-resources/src/components/CreateCandidate.svelte +++ b/plugins/recruit-resources/src/components/CreateCandidate.svelte @@ -28,7 +28,7 @@ import type { Candidate } from '@anticrm/recruit' import type { Attachment } from '@anticrm/chunter' - import { EditBox, Link, showPopup, Component, CircleButton, IconFile as FileIcon, Spinner, Label, Status as StatusComponent } from '@anticrm/ui' + import { EditBox, Link, showPopup, Component, CircleButton, IconFile as FileIcon, IconAdd, Spinner, Label, Status as StatusComponent } from '@anticrm/ui' import FileUpload from './icons/FileUpload.svelte' import Avatar from './icons/Avatar.svelte' import Edit from './icons/Edit.svelte' @@ -133,6 +133,11 @@ if (file !== undefined) { createAttachment(file) } } + function saveChannels(result: any) { + object.channels = result + client.updateDoc(recruit.class.Candidate, object.space, object._id, { channels: result }) + } + let kl: number = 0 </script> @@ -166,44 +171,56 @@ {#if kl === 0} <Avatar /> {:else if kl === 1} - <img src={Girl} alt="Avatar" /> + <img width="100%" src={Girl} alt="Avatar" /> {:else if kl === 2} - <img src={Elon} alt="Avatar" /> + <img width="100%" src={Elon} alt="Avatar" /> {:else} - <img src={Bond} alt="Avatar" /> + <img width="100%" src={Bond} alt="Avatar" /> {/if} </div> </div> <div class="flex-col"> - <div class="name"><EditBox placeholder="John" maxWidth="9.5rem" bind:value={firstName}/></div> - <div class="name"><EditBox placeholder="Appleseed" maxWidth="9.5rem" bind:value={lastName}/></div> - <div class="title"><EditBox placeholder="Title" maxWidth="9.5rem" bind:value={object.title}/></div> - <div class="city"><EditBox placeholder="Location" maxWidth="9.5rem" bind:value={object.city}/></div> - <!-- <div class="flex resume"> - {#if resume.uuid} - <Link label={resume.name} href={'#'} icon={FileIcon} maxLenght={16} on:click={ () => { showPopup(PDFViewer, { file: resume.uuid }, 'right') } }/> - {:else} - {#if loading} - <Link label={'Uploading...'} href={'#'} icon={Spinner} disabled /> - {:else} - <Link label={'Upload resume'} href={'#'} icon={FileUpload} on:click={ () => { inputFile.click() } } /> - {/if} - <input bind:this={inputFile} type="file" name="file" id="file" style="display: none" on:change={fileSelected}/> - {/if} - </div> --> + <div class="fs-title"><EditBox placeholder="John" maxWidth="10rem" bind:value={firstName}/></div> + <div class="fs-title mb-1"><EditBox placeholder="Appleseed" maxWidth="10rem" bind:value={lastName}/></div> + <div class="fs-subtitle"><EditBox placeholder="Title" maxWidth="10rem" bind:value={object.title}/></div> + <div class="fs-subtitle"><EditBox placeholder="Location" maxWidth="10rem" bind:value={object.city}/></div> </div> </div> + + <div class="flex-row-center channels"> + {#if !object.channels || object.channels.length === 0} + <CircleButton icon={IconAdd} size={'small'} selected on:click={(ev) => showPopup(SocialEditor, { values: object.channels ?? [] }, ev.target, (result) => { saveChannels(result) })} /> + <span><Label label={'Add social links'} /></span> + {:else} + <Channels value={object.channels} size={'small'} /> + <CircleButton icon={Edit} size={'small'} selected on:click={(ev) => showPopup(SocialEditor, { values: object.channels ?? [] }, ev.target, (result) => { saveChannels(result) })} /> + {/if} + </div> + + <div class="flex-center resume" class:solid={resume.uuid}> + {#if resume.uuid} + <Link label={resume.name} href={'#'} icon={FileIcon} maxLenght={16} on:click={ () => { showPopup(PDFViewer, { file: resume.uuid }, 'right') } }/> + {:else} + {#if loading} + <Link label={'Uploading...'} href={'#'} icon={Spinner} disabled /> + {:else} + <Link label={'Add or drop resume'} href={'#'} icon={FileUpload} on:click={ () => { inputFile.click() } } /> + {/if} + <input bind:this={inputFile} type="file" name="file" id="file" style="display: none" on:change={fileSelected}/> + {/if} + </div> + <div class="separator" /> <div class="flex-col locations"> <span><Label label={'Work location preferences'} /></span> <div class="row"><Label label={'Onsite'} /><YesNo bind:value={object.onsite} /></div> <div class="row"><Label label={'Remote'} /><YesNo bind:value={object.remote} /></div> </div> - <svelte:fragment slot="contacts"> + <!-- <svelte:fragment slot="contacts"> <Channels value={object.channels} /> <CircleButton icon={Edit} label={'Edit'} on:click={(ev) => showPopup(SocialEditor, { values: object.channels ?? [] }, ev.target, (result) => { object.channels = result })} /> - </svelte:fragment> + </svelte:fragment> --> </Card> <style lang="scss"> @@ -213,26 +230,25 @@ flex-shrink: 0; position: relative; margin-right: 1rem; - width: 6rem; - height: 6rem; + width: 4.5rem; + height: 4.5rem; user-select: none; } .avatar-shadow { position: absolute; - width: 6rem; - height: 6rem; + width: 4.5rem; + height: 4.5rem; .bg-avatar { - transform: scale(1.1); filter: blur(10px); - opacity: .75; + opacity: .25; } } .avatar { overflow: hidden; position: absolute; - width: 6rem; - height: 6rem; + width: 4.5rem; + height: 4.5rem; border-radius: 50%; filter: var(--theme-avatar-shadow); cursor: pointer; @@ -255,20 +271,12 @@ } } - .name { - font-weight: 500; - font-size: 1.25rem; - color: var(--theme-caption-color); + .channels { + margin-top: 1.25rem; + span { margin-left: .5rem; } } - .title, .city { - font-weight: 500; - font-size: .75rem; - color: var(--theme-content-accent-color); - } - .title { margin-top: .5rem; } + .locations { - margin-top: 1.5rem; - span { margin-bottom: .125rem; font-weight: 500; @@ -284,11 +292,22 @@ color: var(--theme-caption-color); } } + .separator { margin: 1rem 0; height: 1px; background-color: var(--theme-card-divider); } + + .resume { + margin-top: 1rem; + padding: .75rem; + background: rgba(255, 255, 255, .05); + border: 1px dashed rgba(255, 255, 255, .2); + border-radius: .5rem; + backdrop-filter: blur(10px); + &.solid { border-style: solid; } + } // .resume a { // font-size: .75rem; // color: var(--theme-content-dark-color);