Breakout album rendering to a separate file so albums can use it too

This commit is contained in:
Timothy Farrell 2017-12-01 20:35:35 -06:00
parent 3d99d8b5ef
commit 5d72337750
2 changed files with 63 additions and 3 deletions

View File

@ -5,6 +5,7 @@ import { subscribeToRender, defineView, defineElement as el } from '../utils/dom
import { ImageType } from '../data/image.js'; import { ImageType } from '../data/image.js';
import { pouchDocArrayHash, pouchDocHash } from '../utils/conversion.js'; import { pouchDocArrayHash, pouchDocHash } from '../utils/conversion.js';
import { ThumbnailTemplate } from './components/thumbnail.js'; import { ThumbnailTemplate } from './components/thumbnail.js';
import { AlbumTemplate } from './components/albumTemplate.js';
import { injectStyle, styled } from '../services/style.js'; import { injectStyle, styled } from '../services/style.js';
export function uploadImages(evt, files) { export function uploadImages(evt, files) {
@ -60,8 +61,10 @@ export function AllImagesView(vm, params, key, opts) {
} }
return function() { return function() {
const album = model(); return AlbumTemplate({
title: 'Test',
return el('div', images().map(i => ThumbnailTemplate(i, deleteImage, i._hash()))); id: 1,
photos: []
});
}; };
} }

View File

@ -0,0 +1,57 @@
import { defineView as vw, defineElement as el } from '../../utils/domvm.js';
import { injectStyle, styled } from '../../services/style.js';
import { Icon } from './icon.js';
import { AttachmentImageView } from './attachmentImage.js';
function setRefStyle(ref, style, evt, node, vm) {
vm.refs[ref].patch({ style });
}
export function AlbumTemplate(params) {
const { id, title, photos } = params;
return Album(
{
onmouseenter: [setRefStyle, 'selectButton', 'opacity: 0.7;'],
onmouseleave: [setRefStyle, 'selectButton', 'opacity: 0;']
},
[
albumTitle([
title,
albumSelectButton(
{
_ref: 'selectButton',
onmouseenter: [setRefStyle, 'selectButton', 'opacity: 1;'],
onmouseleave: [setRefStyle, 'selectButton', 'opacity: 0.7;']
},
[Icon({ name: 'check_circle', size: 0.25 })]
)
]),
albumContent()
]
);
}
const Album = styled({
margin: '10px'
});
const albumTitle = styled({
display: 'flex',
alignItems: 'center'
});
const albumContent = styled({
display: 'flex',
alignItems: 'flex-start',
userSelect: 'none'
});
const albumSelectButton = styled({
paddingLeft: '0.5em',
cursor: 'pointer',
opacity: 0, // TODO onhover 0.7
transition:
'transform 0.135s cubic-bezier(0, 0, 0.2, 1), opacity 0.135s cubic-bezier(0, 0, 0.2, 1)'
});