diff --git a/marko/page/data/components/character-list/index.marko b/marko/page/data/components/character-list/index.marko index e2943e1..2e9d159 100644 --- a/marko/page/data/components/character-list/index.marko +++ b/marko/page/data/components/character-list/index.marko @@ -1,5 +1,9 @@ - + \ No newline at end of file diff --git a/marko/page/data/components/character-nicks-modal/component.js b/marko/page/data/components/character-nicks-modal/component.js new file mode 100644 index 0000000..9a6f4fa --- /dev/null +++ b/marko/page/data/components/character-nicks-modal/component.js @@ -0,0 +1,66 @@ +const moment = require("moment") + +const {charactersApi} = require("../../../../../rpdata/api/Character") + +module.exports = class { + onCreate(input) { + this.state = { + error: null, + loading: false, + values: { + newNick: "", + } + } + } + + change(key, ev) { + this.state.values[key] = ev.target.value + } + + open() { + + } + + close() { + this.emit("close") + } + + addNick() { + if (this.state.loading) { + return + } + + const input = {id: this.input.character.id, nick: this.state.values.newNick} + + this.state.loading = true + charactersApi.addNick(input).then((res) => { + this.emit("nicks", res.nicks) + this.state.values = {newNick: ""} + }).catch(errs => { + console.warn("Failed to add nick:", errs) + + this.state.error = "Failed to add nick: " + errs[0].message + }).then(() => { + this.state.loading = false + }) + } + + removeNick(nick) { + if (this.state.loading) { + return + } + + const input = {id: this.input.character.id, nick} + + this.state.loading = true + charactersApi.removeNick(input).then((res) => { + this.emit("nicks", res.nicks) + }).catch(errs => { + console.warn("Failed to remove nick:", errs) + + this.state.error = "Failed to remove nick: " + errs[0].message + }).then(() => { + this.state.loading = false + }) + } +} \ No newline at end of file diff --git a/marko/page/data/components/character-nicks-modal/index.marko b/marko/page/data/components/character-nicks-modal/index.marko new file mode 100644 index 0000000..ef0b2cf --- /dev/null +++ b/marko/page/data/components/character-nicks-modal/index.marko @@ -0,0 +1,18 @@ + +

Manage Nicks

+ +

${state.error}

+ + +
+ + +
+ + +
+
${nick}
+ +
+ +
\ No newline at end of file diff --git a/marko/page/data/components/character-nicks-modal/style.less b/marko/page/data/components/character-nicks-modal/style.less new file mode 100644 index 0000000..604c6e2 --- /dev/null +++ b/marko/page/data/components/character-nicks-modal/style.less @@ -0,0 +1,34 @@ +div.add-nick-row { + vertical-align: middle !important; + margin-top: -1em; + + input { + vertical-align: middle !important; + display: inline-block !important; + width: 78% !important; + margin: 0 !important; + } + + button { + vertical-align: middle !important; + display: inline-block !important; + width: 20% !important; + padding: 0.5em 0 !important; + } +} + +div.existing-nick-row { + padding: 0.25em; + border-bottom: 1px solid rgba(0, 220, 255, 0.125); + + div.content { + width: 80%; + display: inline-block; + } + + button { + width: 20% !important; + display: inline-block !important; + margin: 0 !important; + } +} \ No newline at end of file diff --git a/marko/page/data/components/character/index.marko b/marko/page/data/components/character/index.marko index da926c8..a2621e5 100644 --- a/marko/page/data/components/character/index.marko +++ b/marko/page/data/components/character/index.marko @@ -5,8 +5,10 @@ Edit + Nicks Remove + \ No newline at end of file diff --git a/marko/page/data/components/characters-page/component.js b/marko/page/data/components/characters-page/component.js index 5bc62d3..4417c16 100644 --- a/marko/page/data/components/characters-page/component.js +++ b/marko/page/data/components/characters-page/component.js @@ -33,4 +33,16 @@ module.exports = class { characterAdded(character) { this.state.characters = this.state.characters.concat(character) } + + characterNicksChanged(character, nicks) { + const characters = this.state.characters.slice() + const index = characters.findIndex(c => c.id === character.id) + if (index === -1) { + return + } + + characters[index] = Object.assign(characters[index], {nicks: nicks.slice(), nick: (nicks[0] || "")}) + + this.state.characters = characters + } } \ No newline at end of file diff --git a/marko/page/data/components/characters-page/index.marko b/marko/page/data/components/characters-page/index.marko index 5040783..d20dee9 100644 --- a/marko/page/data/components/characters-page/index.marko +++ b/marko/page/data/components/characters-page/index.marko @@ -1,5 +1,5 @@
- +
diff --git a/rpdata/api/Character.js b/rpdata/api/Character.js index c320edd..c8355de 100644 --- a/rpdata/api/Character.js +++ b/rpdata/api/Character.js @@ -102,6 +102,44 @@ class ChracterAPI { }) } + /** + * Call `addCharacterNick(input)` mutation, returns new nick list. + * + * @param {{id:string, nick:string}} input + * @returns {Promise<{id:string, nicks:string[]}>} + */ + addNick(input) { + return query(` + mutation AddCharacterNick($input: CharacterNickInput!) { + addCharacterNick(input: $input) { + id + nicks + } + } + `, {input}, {permissions: ["member", "character.edit"]}).then(({addCharacterNick}) => { + return addCharacterNick + }) + } + + /** + * Call `removeCharacterNick(input)` mutation, returns new nick list. + * + * @param {{id:string, nick:string}} input + * @returns {Promise<{id:string, nicks:string[]}>} + */ + removeNick(input) { + return query(` + mutation RemoveCharacterNick($input: CharacterNickInput!) { + removeCharacterNick(input: $input) { + id + nicks + } + } + `, {input}, {permissions: ["member", "character.edit"]}).then(({removeCharacterNick}) => { + return removeCharacterNick + }) + } + /** * Call `removeCharacter(input)` mutation *