diff options
| author | Maxim Filippov <colixer@gmail.com> | 2018-12-13 05:00:01 +0300 |
|---|---|---|
| committer | Maxim Filippov <colixer@gmail.com> | 2018-12-13 05:00:01 +0300 |
| commit | 24caa2cfcd8da73d82d163ca3cb8b9bdb945dd4b (patch) | |
| tree | 31acd854c8119ee19f95b8237b819fc58214d287 | |
| parent | ae8f0f36d8944210e83c60a931ad14da4c5d4a67 (diff) | |
Add generateProfileLink
4 files changed, 31 insertions, 1 deletions
diff --git a/src/components/chat_panel/chat_panel.js b/src/components/chat_panel/chat_panel.js index d8736d17..959b5c3a 100644 --- a/src/components/chat_panel/chat_panel.js +++ b/src/components/chat_panel/chat_panel.js @@ -1,3 +1,5 @@ +import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator' + const chatPanel = { data () { return { @@ -9,6 +11,9 @@ const chatPanel = { computed: { messages () { return this.$store.state.chat.messages + }, + userProfileLink (user) { + return generateProfileLink(user, user.name) } }, methods: { diff --git a/src/components/chat_panel/chat_panel.vue b/src/components/chat_panel/chat_panel.vue index e3671818..182ea347 100644 --- a/src/components/chat_panel/chat_panel.vue +++ b/src/components/chat_panel/chat_panel.vue @@ -13,7 +13,7 @@ <img :src="message.author.avatar" /> </span> <div class="chat-content"> - <router-link class="chat-name" :to="{ name: 'user-profile', params: { name: message.author.username } }"> + <router-link class="chat-name" :to="userProfileLink(message.author)"> {{message.author.username}} </router-link> <br> diff --git a/src/services/user_profile_link_generator/user_profile_link_generator.js b/src/services/user_profile_link_generator/user_profile_link_generator.js new file mode 100644 index 00000000..88e0ec38 --- /dev/null +++ b/src/services/user_profile_link_generator/user_profile_link_generator.js @@ -0,0 +1,10 @@ +const generateProfileLink = (user, name = '') => { + const baseLinkParams = { name: 'user-profile' } + const { id } = user + + return { ...baseLinkParams, params: (isExternal(user) ? { id } : { name }) } +} + +const isExternal = ({screen_name}) => (screen_name.indexOf('@') > 0) + +export default generateProfileLink diff --git a/test/unit/specs/services/user_profile_link_generator/user_profile_link_generator.spec.js b/test/unit/specs/services/user_profile_link_generator/user_profile_link_generator.spec.js new file mode 100644 index 00000000..dbb2ba9d --- /dev/null +++ b/test/unit/specs/services/user_profile_link_generator/user_profile_link_generator.spec.js @@ -0,0 +1,15 @@ +import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator' + +describe('generateProfileLink', () => { + it('returns obj for local user', () => { + const user = { screen_name: 'john' } + + expect(generateProfileLink(user, 'jack')).to.eql({ name: 'user-profile', params: { name: 'jack' } }) + }) + + it('returns obj for external user', () => { + const user = { screen_name: 'john@domain', id: 1 } + + expect(generateProfileLink(user)).to.eql({ name: 'user-profile', params: { id: 1 } }) + }) +}) |
