Replaced default height and weight fields with fields taking units argument.
This commit is contained in:
parent
577c03f9b7
commit
f4c2e6c08c
|
@ -136,8 +136,8 @@
|
||||||
>
|
>
|
||||||
<dfn class="bio-label"><Icon icon="height" />Height</dfn>
|
<dfn class="bio-label"><Icon icon="height" />Height</dfn>
|
||||||
<span>
|
<span>
|
||||||
<span class="height-metric">{{ actor.height }} cm</span>
|
<span class="height-metric">{{ actor.height.metric }} cm</span>
|
||||||
<span class="height-imperial">{{ imperialHeight.feet }}' {{ imperialHeight.inches }}"</span>
|
<span class="height-imperial">{{ actor.height.imperial }}</span>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
@ -148,8 +148,8 @@
|
||||||
<dfn class="bio-label"><Icon icon="scale" />Weight</dfn>
|
<dfn class="bio-label"><Icon icon="scale" />Weight</dfn>
|
||||||
|
|
||||||
<span>
|
<span>
|
||||||
<span class="weight-metric">{{ actor.weight }} kg</span>
|
<span class="weight-metric">{{ actor.weight.metric }} kg</span>
|
||||||
<span class="weight-imperial">{{ imperialWeight }} lbs</span>
|
<span class="weight-imperial">{{ actor.weight.imperial }} lbs</span>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
@ -239,8 +239,6 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { cmToFeetInches, kgToLbs } from '../../../src/utils/convert';
|
|
||||||
|
|
||||||
import Photos from './photos.vue';
|
import Photos from './photos.vue';
|
||||||
import FilterBar from '../header/filter-bar.vue';
|
import FilterBar from '../header/filter-bar.vue';
|
||||||
import Releases from '../releases/releases.vue';
|
import Releases from '../releases/releases.vue';
|
||||||
|
@ -249,14 +247,6 @@ async function fetchReleases() {
|
||||||
this.releases = await this.$store.dispatch('fetchActorReleases', this.$route.params.actorSlug);
|
this.releases = await this.$store.dispatch('fetchActorReleases', this.$route.params.actorSlug);
|
||||||
}
|
}
|
||||||
|
|
||||||
function imperialHeight() {
|
|
||||||
return cmToFeetInches(this.actor.height);
|
|
||||||
}
|
|
||||||
|
|
||||||
function imperialWeight() {
|
|
||||||
return kgToLbs(this.actor.weight);
|
|
||||||
}
|
|
||||||
|
|
||||||
function scrollPhotos(event) {
|
function scrollPhotos(event) {
|
||||||
event.currentTarget.scrollLeft += event.deltaY; // eslint-disable-line no-param-reassign
|
event.currentTarget.scrollLeft += event.deltaY; // eslint-disable-line no-param-reassign
|
||||||
}
|
}
|
||||||
|
@ -286,10 +276,6 @@ export default {
|
||||||
expanded: false,
|
expanded: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
|
||||||
imperialHeight,
|
|
||||||
imperialWeight,
|
|
||||||
},
|
|
||||||
mounted,
|
mounted,
|
||||||
methods: {
|
methods: {
|
||||||
fetchReleases,
|
fetchReleases,
|
||||||
|
|
|
@ -4,8 +4,23 @@ function curateActor(actor) {
|
||||||
const curatedActor = {
|
const curatedActor = {
|
||||||
...actor,
|
...actor,
|
||||||
avatar: actor.avatar[0],
|
avatar: actor.avatar[0],
|
||||||
origin: {
|
height: actor.heightMetric && {
|
||||||
country: actor.originCountry,
|
metric: actor.heightMetric,
|
||||||
|
imperial: actor.heightImperial,
|
||||||
|
},
|
||||||
|
weight: actor.weightMetric && {
|
||||||
|
metric: actor.weightMetric,
|
||||||
|
imperial: actor.weightImperial,
|
||||||
|
},
|
||||||
|
origin: actor.birthCountry && {
|
||||||
|
city: actor.birthCity,
|
||||||
|
state: actor.birthState,
|
||||||
|
country: actor.birthCountry,
|
||||||
|
},
|
||||||
|
residence: actor.residenceCountry && {
|
||||||
|
city: actor.residenceCity,
|
||||||
|
state: actor.residenceState,
|
||||||
|
country: actor.residenceCountry,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -20,14 +35,50 @@ function initActorActions(store, _router) {
|
||||||
id
|
id
|
||||||
name
|
name
|
||||||
slug
|
slug
|
||||||
|
gender
|
||||||
|
birthdate
|
||||||
|
age
|
||||||
|
ethnicity
|
||||||
|
bust
|
||||||
|
waist
|
||||||
|
hip
|
||||||
|
heightMetric: height(units:METRIC)
|
||||||
|
heightImperial: height(units:IMPERIAL)
|
||||||
|
weightMetric: weight(units:METRIC)
|
||||||
|
weightImperial: weight(units:IMPERIAL)
|
||||||
|
hasTattoos
|
||||||
|
hasPiercings
|
||||||
|
tattoos
|
||||||
|
piercings
|
||||||
avatar: actorsMediasByTargetId(condition: { role:"avatar" }) {
|
avatar: actorsMediasByTargetId(condition: { role:"avatar" }) {
|
||||||
thumbnail
|
thumbnail
|
||||||
|
path
|
||||||
}
|
}
|
||||||
originCountry: countryByBirthCountryAlpha2 {
|
photos: actorsMediasByTargetId(condition: { role:"photo" }) {
|
||||||
|
id
|
||||||
|
thumbnail
|
||||||
|
path
|
||||||
|
index
|
||||||
|
}
|
||||||
|
birthCity
|
||||||
|
birthState
|
||||||
|
birthCountry: countryByBirthCountryAlpha2 {
|
||||||
alpha2
|
alpha2
|
||||||
name
|
name
|
||||||
alias
|
alias
|
||||||
}
|
}
|
||||||
|
residenceCity
|
||||||
|
residenceState
|
||||||
|
residenceCountry: countryByResidenceCountryAlpha2 {
|
||||||
|
alpha2
|
||||||
|
name
|
||||||
|
alias
|
||||||
|
}
|
||||||
|
social: actorsSocialsByTargetId {
|
||||||
|
id
|
||||||
|
url
|
||||||
|
platform
|
||||||
|
}
|
||||||
aliases: actorsByAliasFor {
|
aliases: actorsByAliasFor {
|
||||||
id
|
id
|
||||||
name
|
name
|
||||||
|
@ -56,7 +107,7 @@ function initActorActions(store, _router) {
|
||||||
avatar: actorsMediasByTargetId(condition: { role:"avatar" }) {
|
avatar: actorsMediasByTargetId(condition: { role:"avatar" }) {
|
||||||
thumbnail
|
thumbnail
|
||||||
}
|
}
|
||||||
originCountry: countryByBirthCountryAlpha2 {
|
birthCountry: countryByBirthCountryAlpha2 {
|
||||||
alpha2
|
alpha2
|
||||||
name
|
name
|
||||||
alias
|
alias
|
||||||
|
@ -67,8 +118,6 @@ function initActorActions(store, _router) {
|
||||||
limit,
|
limit,
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(actors);
|
|
||||||
|
|
||||||
return actors.map(actor => curateActor(actor));
|
return actors.map(actor => curateActor(actor));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@ function initReleasesActions(_store, _router) {
|
||||||
name
|
name
|
||||||
slug
|
slug
|
||||||
birthdate
|
birthdate
|
||||||
|
age
|
||||||
originCountry: countryByBirthCountryAlpha2 {
|
originCountry: countryByBirthCountryAlpha2 {
|
||||||
alpha2
|
alpha2
|
||||||
name
|
name
|
||||||
|
@ -111,6 +112,7 @@ function initReleasesActions(_store, _router) {
|
||||||
name
|
name
|
||||||
slug
|
slug
|
||||||
birthdate
|
birthdate
|
||||||
|
age
|
||||||
originCountry: countryByBirthCountryAlpha2 {
|
originCountry: countryByBirthCountryAlpha2 {
|
||||||
alpha2
|
alpha2
|
||||||
name
|
name
|
||||||
|
|
|
@ -296,11 +296,18 @@ exports.up = knex => Promise.resolve()
|
||||||
|
|
||||||
CREATE VIEW releases_tags AS SELECT * FROM tags_associated WHERE domain = 'releases';
|
CREATE VIEW releases_tags AS SELECT * FROM tags_associated WHERE domain = 'releases';
|
||||||
|
|
||||||
|
CREATE VIEW actors_social AS SELECT * FROM social WHERE domain = 'actors';
|
||||||
|
|
||||||
COMMENT ON VIEW releases_media IS E'@foreignKey (target_id) references releases (id)|@fieldName releaseMedia';
|
COMMENT ON VIEW releases_media IS E'@foreignKey (target_id) references releases (id)|@fieldName releaseMedia';
|
||||||
COMMENT ON VIEW actors_media IS E'@foreignKey (target_id) references actors (id)|@fieldName actorMedia';
|
COMMENT ON VIEW actors_media IS E'@foreignKey (target_id) references actors (id)|@fieldName actorMedia';
|
||||||
COMMENT ON VIEW tags_media IS E'@foreignKey (target_id) references tags (id)|@fieldName tagMedia';
|
COMMENT ON VIEW tags_media IS E'@foreignKey (target_id) references tags (id)|@fieldName tagMedia';
|
||||||
|
|
||||||
COMMENT ON VIEW releases_tags IS E'@foreignKey (target_id) references releases (id)\n@foreignKey (tag_id) references tags (id)|@fieldName releaseTag';
|
COMMENT ON VIEW actors_social IS E'@foreignKey (target_id) references actors (id)|@fieldName actorSocial';
|
||||||
|
|
||||||
|
COMMENT ON VIEW releases_tags IS E'@foreignKey (target_id) references releases (id)|@fieldName tagRelease\n@foreignKey (tag_id) references tags (id)|@fieldName releaseTag';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN actors.height IS E'@omit read,update,create,delete,all,many';
|
||||||
|
COMMENT ON COLUMN actors.weight IS E'@omit read,update,create,delete,all,many';
|
||||||
`));
|
`));
|
||||||
|
|
||||||
exports.down = knex => Promise.resolve()
|
exports.down = knex => Promise.resolve()
|
||||||
|
@ -310,6 +317,8 @@ exports.down = knex => Promise.resolve()
|
||||||
DROP VIEW tags_media;
|
DROP VIEW tags_media;
|
||||||
|
|
||||||
DROP VIEW releases_tags;
|
DROP VIEW releases_tags;
|
||||||
|
|
||||||
|
DROP VIEW actors_social;
|
||||||
`))
|
`))
|
||||||
.then(() => knex.schema.dropTable('tags_associated'))
|
.then(() => knex.schema.dropTable('tags_associated'))
|
||||||
.then(() => knex.schema.dropTable('directors_associated'))
|
.then(() => knex.schema.dropTable('directors_associated'))
|
||||||
|
|
|
@ -83,6 +83,7 @@
|
||||||
"express-react-views": "^0.11.0",
|
"express-react-views": "^0.11.0",
|
||||||
"face-api.js": "^0.21.0",
|
"face-api.js": "^0.21.0",
|
||||||
"fs-extra": "^7.0.1",
|
"fs-extra": "^7.0.1",
|
||||||
|
"graphile-utils": "^4.5.6",
|
||||||
"jsdom": "^15.2.1",
|
"jsdom": "^15.2.1",
|
||||||
"knex": "^0.16.5",
|
"knex": "^0.16.5",
|
||||||
"knex-migrate": "^1.7.4",
|
"knex-migrate": "^1.7.4",
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const { makeExtendSchemaPlugin, gql } = require('graphile-utils');
|
||||||
|
const moment = require('moment');
|
||||||
|
const { cmToFeetInches, kgToLbs } = require('../../utils/convert');
|
||||||
|
|
||||||
|
const schemaExtender = makeExtendSchemaPlugin(_build => ({
|
||||||
|
typeDefs: gql`
|
||||||
|
enum Units {
|
||||||
|
METRIC
|
||||||
|
IMPERIAL
|
||||||
|
}
|
||||||
|
|
||||||
|
extend type Actor {
|
||||||
|
age: Int @requires(columns: ["birthdate"])
|
||||||
|
height(units:Units): String @requires(columns: ["height"])
|
||||||
|
weight(units:Units): String @requires(columns: ["weight"])
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
resolvers: {
|
||||||
|
Actor: {
|
||||||
|
age(parent, _args, _context, _info) {
|
||||||
|
if (!parent.birthdate) return null;
|
||||||
|
|
||||||
|
return moment().diff(parent.birthdate, 'years');
|
||||||
|
},
|
||||||
|
height(parent, args, _context, _info) {
|
||||||
|
if (!parent.height) return null;
|
||||||
|
|
||||||
|
if (args.units === 'IMPERIAL') {
|
||||||
|
const { feet, inches } = cmToFeetInches(parent.height);
|
||||||
|
return `${feet}' ${inches}"`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent.height.toString();
|
||||||
|
},
|
||||||
|
weight(parent, args, _context, _info) {
|
||||||
|
if (!parent.weight) return null;
|
||||||
|
|
||||||
|
return args.units === 'IMPERIAL'
|
||||||
|
? kgToLbs(parent.weight).toString()
|
||||||
|
: parent.weight.toString();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
module.exports = [schemaExtender];
|
|
@ -0,0 +1,7 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const ActorPlugins = require('./actors');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
ActorPlugins,
|
||||||
|
};
|
|
@ -10,6 +10,8 @@ const bodyParser = require('body-parser');
|
||||||
const ConnectionFilterPlugin = require('postgraphile-plugin-connection-filter');
|
const ConnectionFilterPlugin = require('postgraphile-plugin-connection-filter');
|
||||||
const PgSimplifyInflectorPlugin = require('@graphile-contrib/pg-simplify-inflector');
|
const PgSimplifyInflectorPlugin = require('@graphile-contrib/pg-simplify-inflector');
|
||||||
|
|
||||||
|
const { ActorPlugins } = require('./plugins/plugins');
|
||||||
|
|
||||||
const {
|
const {
|
||||||
fetchReleases,
|
fetchReleases,
|
||||||
fetchReleaseById,
|
fetchReleaseById,
|
||||||
|
@ -47,7 +49,10 @@ function initServer() {
|
||||||
graphileBuildOptions: {
|
graphileBuildOptions: {
|
||||||
pgOmitListSuffix: true,
|
pgOmitListSuffix: true,
|
||||||
},
|
},
|
||||||
appendPlugins: [PgSimplifyInflectorPlugin, ConnectionFilterPlugin],
|
appendPlugins: [
|
||||||
|
PgSimplifyInflectorPlugin, ConnectionFilterPlugin,
|
||||||
|
...ActorPlugins,
|
||||||
|
],
|
||||||
},
|
},
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue