From 648db552e7943f7bb57a6129945bfdb6df46f6e1 Mon Sep 17 00:00:00 2001 From: Phillip Date: Thu, 2 Feb 2023 10:19:52 +0200 Subject: [PATCH 01/17] fix bug that when a user clicks on a notification and goes back to the app it correctly show the chat page. before it would have an infinite spinner --- .../notification-actions/new-message.js | 5 +-- .../core/messaging/q-chat/q-chat.src.js | 39 ++++++++++++++++--- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/qortal-ui-core/src/notifications/notification-actions/new-message.js b/qortal-ui-core/src/notifications/notification-actions/new-message.js index faaaad32..f430fdd2 100644 --- a/qortal-ui-core/src/notifications/notification-actions/new-message.js +++ b/qortal-ui-core/src/notifications/notification-actions/new-message.js @@ -2,7 +2,6 @@ import { store } from '../../store.js' import { doPageUrl } from '../../redux/app/app-actions.js' export const newMessage = (data) => { - const alert = playSound(data.sound) // Should I show notification ? @@ -18,7 +17,7 @@ export const newMessage = (data) => { } notify.onclick = (e) => { - const pageUrl = `/app/q-chat/${data.req.url}` + const pageUrl = `/app/q-chat/?chat=${data.req.url}` store.dispatch(doPageUrl(pageUrl)) } } else { @@ -26,7 +25,7 @@ export const newMessage = (data) => { const notify = new Notification(data.title, data.options) notify.onclick = (e) => { - const pageUrl = `/app/q-chat/${data.req.url}` + const pageUrl = `/app/q-chat/?chat=${data.req.url}` store.dispatch(doPageUrl(pageUrl)) } } diff --git a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js index a8b268e5..fbe12aa5 100644 --- a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js +++ b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js @@ -29,7 +29,7 @@ import StarterKit from '@tiptap/starter-kit' import Underline from '@tiptap/extension-underline'; import Placeholder from '@tiptap/extension-placeholder' import { Editor, Extension } from '@tiptap/core' - +import Highlight from '@tiptap/extension-highlight' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) class Chat extends LitElement { @@ -55,7 +55,7 @@ class Chat extends LitElement { userFoundModalOpen: { type: Boolean }, userSelected: { type: Object }, editor: {type: Object}, - groupInvites: { type: Array } + groupInvites: { type: Array }, } } @@ -118,6 +118,7 @@ class Chat extends LitElement { } async connectedCallback() { + super.connectedCallback(); await this.getUpdateCompleteTextEditor(); @@ -147,15 +148,36 @@ class Chat extends LitElement { }}) ] }) + + this.unsubscribeStore = window.parent.reduxStore.subscribe(() => { + try { + + if(window.parent.location && window.parent.location.search){ + const queryString = window.parent.location.search; + const params = new URLSearchParams(queryString); + const chat = params.get("chat") + if(chat && chat !== this.activeChatHeadUrl){ + let url = window.parent.location.href; + let newUrl = url.split("?")[0]; + window.parent.history.pushState({}, "", newUrl); + this.setActiveChatHeadUrl(chat) + } + } + } catch (error) { + console.error(error) + } + + }); } disconnectedCallback() { super.disconnectedCallback(); - this.editor.destroy() - + this.editor.destroy(); + this.unsubscribeStore(); } + updatePlaceholder(editor, text){ editor.extensionManager.extensions.forEach((extension) => { if (extension.name === "placeholder") { @@ -215,7 +237,7 @@ class Chat extends LitElement {
- ${window.parent.location.pathname !== "/app/q-chat" || this.activeChatHeadUrl ? html`${this.renderChatPage(this.chatId)}` : html`${this.renderChatWelcomePage()}`} + ${this.activeChatHeadUrl ? html`${this.renderChatPage()}` : html`${this.renderChatWelcomePage()}`}
@@ -367,6 +389,8 @@ class Chat extends LitElement { ` } + + async firstUpdated() { this.changeLanguage(); this.changeTheme(); @@ -482,8 +506,11 @@ class Chat extends LitElement { }) }) parentEpml.imReady() + } + + setOpenPrivateMessage(props) { this.openPrivateMessage = props.open; this.shadowRoot.getElementById("sendTo").value = props.name @@ -839,7 +866,7 @@ class Chat extends LitElement { }) } - renderChatPage(chatId) { + renderChatPage() { // Check for the chat ID from and render chat messages // Else render Welcome to Q-CHat From e07884c1e1a718485de3760a4c04581a33167d05 Mon Sep 17 00:00:00 2001 From: Phillip Date: Fri, 3 Feb 2023 16:07:14 +0200 Subject: [PATCH 02/17] last message timestamp with red dot --- qortal-ui-core/language/us.json | 3 +- qortal-ui-core/package.json | 5 +- qortal-ui-core/src/components/app-view.js | 18 ++++ .../src/components/login-view/login-view.js | 6 +- qortal-ui-core/src/plugins/streams.js | 5 ++ .../src/redux/app/actions/app-core.js | 15 +++- .../src/redux/app/app-action-types.js | 4 +- qortal-ui-core/src/redux/app/app-reducer.js | 42 ++++++++- .../plugins/core/components/ChatHead.js | 88 ++++++++++++++++--- .../plugins/core/components/ChatPage.js | 18 ++-- .../plugins/core/components/TimeAgo.js | 3 +- 11 files changed, 178 insertions(+), 29 deletions(-) diff --git a/qortal-ui-core/language/us.json b/qortal-ui-core/language/us.json index 55ad9dd7..6f625f02 100644 --- a/qortal-ui-core/language/us.json +++ b/qortal-ui-core/language/us.json @@ -579,7 +579,8 @@ "cchange71": "and", "cchange72": "other", "cchange73": "s", - "cchange74": "reacted with" + "cchange74": "reacted with", + "cchange90": "No messages" }, "welcomepage": { "wcchange1": "Welcome to Q-Chat", diff --git a/qortal-ui-core/package.json b/qortal-ui-core/package.json index 5515942d..8e4f2ad3 100644 --- a/qortal-ui-core/package.json +++ b/qortal-ui-core/package.json @@ -77,9 +77,10 @@ "rollup-plugin-node-globals": "1.4.0", "rollup-plugin-progress": "1.1.2", "rollup-plugin-scss": "3.0.0", - "rollup-plugin-web-worker-loader": "1.6.1" + "rollup-plugin-web-worker-loader": "1.6.1", + "localforage": "1.10.0" }, "engines": { "node": ">=16.17.1" } -} \ No newline at end of file +} diff --git a/qortal-ui-core/src/components/app-view.js b/qortal-ui-core/src/components/app-view.js index cffc315f..60d02813 100644 --- a/qortal-ui-core/src/components/app-view.js +++ b/qortal-ui-core/src/components/app-view.js @@ -4,6 +4,11 @@ import { store } from '../store.js' import { Epml } from '../epml.js' import { addTradeBotRoutes } from '../tradebot/addTradeBotRoutes.js' import { get, translate, translateUnsafeHTML } from 'lit-translate' +import localForage from "localforage"; + +const chatLastSeen = localForage.createInstance({ + name: "chat-last-seen", +}); import '@polymer/paper-icon-button/paper-icon-button.js' import '@polymer/paper-progress/paper-progress.js' @@ -27,6 +32,7 @@ import './user-info-view/user-info-view.js' import '../functional-components/side-menu.js' import '../functional-components/side-menu-item.js' import './start-minting.js' +import { setChatLastSeen } from '../redux/app/app-actions.js' const parentEpml = new Epml({type: 'WINDOW', source: window.parent}) @@ -1386,6 +1392,17 @@ class AppView extends connect(store)(LitElement) { } } + const getChatLastSeen=async() => { + let items = []; + + await chatLastSeen.iterate(function(value, key, iterationNumber) { + + items.push({key, timestamp: value}); + }) + store.dispatch(setChatLastSeen(items)) + return items; + } + await getOpenTradesBTC() await appDelay(1000) await getOpenTradesLTC() @@ -1397,6 +1414,7 @@ class AppView extends connect(store)(LitElement) { await getOpenTradesRVN() await appDelay(1000) await getOpenTradesARRR() + await getChatLastSeen() } async getNodeType() { diff --git a/qortal-ui-core/src/components/login-view/login-view.js b/qortal-ui-core/src/components/login-view/login-view.js index aadc1973..ebdf31f2 100644 --- a/qortal-ui-core/src/components/login-view/login-view.js +++ b/qortal-ui-core/src/components/login-view/login-view.js @@ -14,12 +14,14 @@ import './login-section.js' import '../qort-theme-toggle.js' import settings from '../../functional-components/settings-page.js' -import { addAutoLoadImageChat, removeAutoLoadImageChat } from '../../redux/app/app-actions.js' +import { addAutoLoadImageChat, removeAutoLoadImageChat, addChatLastSeen } from '../../redux/app/app-actions.js' window.reduxStore = store window.reduxAction = { addAutoLoadImageChat: addAutoLoadImageChat, - removeAutoLoadImageChat: removeAutoLoadImageChat + removeAutoLoadImageChat: removeAutoLoadImageChat, + addChatLastSeen: addChatLastSeen + } const animationDuration = 0.7 // Seconds diff --git a/qortal-ui-core/src/plugins/streams.js b/qortal-ui-core/src/plugins/streams.js index ad6696d1..9cb6c3f7 100644 --- a/qortal-ui-core/src/plugins/streams.js +++ b/qortal-ui-core/src/plugins/streams.js @@ -9,6 +9,7 @@ const CHAT_HEADS_STREAM_NAME = 'chat_heads' const NODE_CONFIG_STREAM_NAME = 'node_config' const COPY_MENU_SWITCH = 'copy_menu_switch' const FRAME_PASTE_MENU_SWITCH = 'frame_paste_menu_switch' +const CHAT_LAST_SEEN = 'chat_last_seen' export const loggedInStream = new EpmlStream(LOGIN_STREAM_NAME, () => store.getState().app.loggedIn) export const configStream = new EpmlStream(CONFIG_STREAM_NAME, () => store.getState().config) @@ -18,6 +19,7 @@ export const chatHeadsStateStream = new EpmlStream(CHAT_HEADS_STREAM_NAME, () => export const nodeConfigStream = new EpmlStream(NODE_CONFIG_STREAM_NAME, () => store.getState().app.nodeConfig) export const copyMenuSwitchStream = new EpmlStream(COPY_MENU_SWITCH, () => store.getState().app.copyMenuSwitch) export const framePasteMenuSwitchStream = new EpmlStream(FRAME_PASTE_MENU_SWITCH, () => store.getState().app.framePasteMenuSwitch) +export const chatLastSeenStream = new EpmlStream(CHAT_LAST_SEEN, () => store.getState().app.chatLastSeen) let oldState = { @@ -46,6 +48,9 @@ store.subscribe(() => { if (oldState.app.framePasteMenuSwitch !== state.app.framePasteMenuSwitch) { framePasteMenuSwitchStream.emit(state.app.framePasteMenuSwitch) } + if (oldState.app.chatLastSeen !== state.app.chatLastSeen) { + chatLastSeenStream.emit(state.app.chatLastSeen) + } if (oldState.app.selectedAddress !== state.app.selectedAddress) { selectedAddressStream.emit({ diff --git a/qortal-ui-core/src/redux/app/actions/app-core.js b/qortal-ui-core/src/redux/app/actions/app-core.js index d91c2fa2..894f2c2e 100644 --- a/qortal-ui-core/src/redux/app/actions/app-core.js +++ b/qortal-ui-core/src/redux/app/actions/app-core.js @@ -1,5 +1,5 @@ // Core App Actions here... -import { UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, CHAT_HEADS, ACCOUNT_INFO, COPY_MENU_SWITCH, PASTE_MENU_SWITCH, FRAME_PASTE_MENU_SWITCH, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT } from '../app-action-types.js' +import { UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, CHAT_HEADS, ACCOUNT_INFO, COPY_MENU_SWITCH, PASTE_MENU_SWITCH, FRAME_PASTE_MENU_SWITCH, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT, SET_CHAT_LAST_SEEN, ADD_CHAT_LAST_SEEN } from '../app-action-types.js' export const doUpdateBlockInfo = (blockObj) => { return (dispatch, getState) => { @@ -120,3 +120,16 @@ export const removeAutoLoadImageChat = (payload) => { } } +export const setChatLastSeen = (payload) => { + return { + type: SET_CHAT_LAST_SEEN, + payload + } +} +export const addChatLastSeen = (payload) => { + return { + type: ADD_CHAT_LAST_SEEN, + payload + } +} + diff --git a/qortal-ui-core/src/redux/app/app-action-types.js b/qortal-ui-core/src/redux/app/app-action-types.js index b0bb7813..518d4cd7 100644 --- a/qortal-ui-core/src/redux/app/app-action-types.js +++ b/qortal-ui-core/src/redux/app/app-action-types.js @@ -21,4 +21,6 @@ export const COPY_MENU_SWITCH = 'COPY_MENU_SWITCH' export const PASTE_MENU_SWITCH = 'PASTE_MENU_SWITCH' export const FRAME_PASTE_MENU_SWITCH = 'FRAME_PASTE_MENU_SWITCH' export const ADD_AUTO_LOAD_IMAGES_CHAT = 'ADD_AUTO_LOAD_IMAGES_CHAT' -export const REMOVE_AUTO_LOAD_IMAGES_CHAT = 'REMOVE_AUTO_LOAD_IMAGES_CHAT' \ No newline at end of file +export const REMOVE_AUTO_LOAD_IMAGES_CHAT = 'REMOVE_AUTO_LOAD_IMAGES_CHAT' +export const SET_CHAT_LAST_SEEN = 'SET_CHAT_LAST_SEEN' +export const ADD_CHAT_LAST_SEEN = 'ADD_CHAT_LAST_SEEN' diff --git a/qortal-ui-core/src/redux/app/app-reducer.js b/qortal-ui-core/src/redux/app/app-reducer.js index 6f3d8e1d..68a48675 100644 --- a/qortal-ui-core/src/redux/app/app-reducer.js +++ b/qortal-ui-core/src/redux/app/app-reducer.js @@ -1,9 +1,14 @@ // Loading state, login state, isNavDrawOpen state etc. None of this needs to be saved to localstorage. import { loadStateFromLocalStorage, saveStateToLocalStorage } from '../../localStorageHelpers.js' -import { LOG_IN, LOG_OUT, NETWORK_CONNECTION_STATUS, INIT_WORKERS, ADD_PLUGIN_URL, ADD_PLUGIN, ADD_NEW_PLUGIN_URL, NAVIGATE, SELECT_ADDRESS, ACCOUNT_INFO, CHAT_HEADS, UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, LOAD_NODE_CONFIG, SET_NODE, ADD_NODE, PAGE_URL, COPY_MENU_SWITCH, PASTE_MENU_SWITCH, FRAME_PASTE_MENU_SWITCH, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT } from './app-action-types.js' +import { LOG_IN, LOG_OUT, NETWORK_CONNECTION_STATUS, INIT_WORKERS, ADD_PLUGIN_URL, ADD_PLUGIN, ADD_NEW_PLUGIN_URL, NAVIGATE, SELECT_ADDRESS, ACCOUNT_INFO, CHAT_HEADS, UPDATE_BLOCK_INFO, UPDATE_NODE_STATUS, UPDATE_NODE_INFO, LOAD_NODE_CONFIG, SET_NODE, ADD_NODE, PAGE_URL, COPY_MENU_SWITCH, PASTE_MENU_SWITCH, FRAME_PASTE_MENU_SWITCH, ADD_AUTO_LOAD_IMAGES_CHAT, REMOVE_AUTO_LOAD_IMAGES_CHAT, SET_CHAT_LAST_SEEN, ADD_CHAT_LAST_SEEN } from './app-action-types.js' import { initWorkersReducer } from './reducers/init-workers.js' import { loginReducer } from './reducers/login-reducer.js' import { setNode, addNode } from './reducers/manage-node.js' +import localForage from "localforage"; +const chatLastSeen = localForage.createInstance({ + name: "chat-last-seen", +}); + const INITIAL_STATE = { loggedIn: false, @@ -44,7 +49,8 @@ const INITIAL_STATE = { isOpen: false, elementId: '' }, - autoLoadImageChats: loadStateFromLocalStorage('autoLoadImageChats') || [] + autoLoadImageChats: loadStateFromLocalStorage('autoLoadImageChats') || [], + chatLastSeen: [] } export default (state = INITIAL_STATE, action) => { @@ -169,6 +175,38 @@ export default (state = INITIAL_STATE, action) => { autoLoadImageChats: updatedState } } + case SET_CHAT_LAST_SEEN: { + return { + ...state, + chatLastSeen: action.payload + } + } + case ADD_CHAT_LAST_SEEN: { + const chatId = action.payload.key + const timestamp = action.payload.timestamp + if(!chatId || !timestamp) return state + let newChatLastSeen = [...state.chatLastSeen] + const findChatIndex = state.chatLastSeen.findIndex((chat)=> chat.key === chatId) + if(findChatIndex !== -1){ + + newChatLastSeen[findChatIndex] = { + key: chatId, + timestamp, + } + } + if(findChatIndex === -1){ + + newChatLastSeen = [...newChatLastSeen, { + key: chatId, + timestamp, + }] + } + chatLastSeen.setItem(chatId, timestamp) + return { + ...state, + chatLastSeen: newChatLastSeen + } + } default: return state diff --git a/qortal-ui-plugins/plugins/core/components/ChatHead.js b/qortal-ui-plugins/plugins/core/components/ChatHead.js index c28a583f..7b706e0c 100644 --- a/qortal-ui-plugins/plugins/core/components/ChatHead.js +++ b/qortal-ui-plugins/plugins/core/components/ChatHead.js @@ -1,11 +1,15 @@ import { LitElement, html, css } from 'lit' import { render } from 'lit/html.js' import { Epml } from '../../../epml.js' +import localForage from "localforage"; +import { translate} from 'lit-translate'; import '@material/mwc-icon' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) - +const chatLastSeen = localForage.createInstance({ + name: "chat-last-seen", +}); class ChatHead extends LitElement { static get properties() { return { @@ -15,7 +19,8 @@ class ChatHead extends LitElement { iconName: { type: String }, activeChatHeadUrl: { type: String }, isImageLoaded: { type: Boolean }, - setActiveChatHeadUrl: {attribute: false} + setActiveChatHeadUrl: {attribute: false}, + lastReadMessageTimestamp: {type: Number} } } @@ -24,9 +29,13 @@ class ChatHead extends LitElement { li { width: 100%; - padding: 7px 5px 7px 5px; + padding: 10px 5px 10px 5px; cursor: pointer; width: 100%; + box-sizing: border-box; + display: flex; + align-items: flex-start; + } li:hover { @@ -44,12 +53,21 @@ class ChatHead extends LitElement { color: var(--chat-group); } - .about { - margin-top: 8px; - } + .about { - padding-left: 8px; + + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + margin: 0px; + } + .inner-container { + display: flex; + width: calc(100% - 45px); + flex-direction: column; + justify-content: center; } .status { @@ -64,6 +82,13 @@ class ChatHead extends LitElement { clear: both; height: 0; } + + .name { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + } ` } @@ -82,6 +107,7 @@ class ChatHead extends LitElement { this.activeChatHeadUrl = '' this.isImageLoaded = false this.imageFetches = 0 + this.lastReadMessageTimestamp = 0 } createImage(imageUrl) { @@ -108,33 +134,59 @@ class ChatHead extends LitElement { }; return imageHTMLRes; } + updated(){ + } render() { let avatarImg = ''; let backupAvatarImg = '' + let isUnread = false + if(this.chatInfo.name){ const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port; const avatarUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.chatInfo.name}/qortal_avatar?async=true&apiKey=${myNode.apiKey}`; avatarImg= this.createImage(avatarUrl) - } + if(this.lastReadMessageTimestamp && this.chatInfo.timestamp){ + if(this.lastReadMessageTimestamp < this.chatInfo.timestamp){ + isUnread = true + } + } + + if(this.activeChatHeadUrl === this.chatInfo.url){ + isUnread = false + } + return html`
  • this.getUrl(this.chatInfo.url)} class="clearfix ${this.activeChatHeadUrl === this.chatInfo.url ? 'active' : ''}"> ${this.isImageLoaded ? html`${avatarImg}` : html`` } ${!this.isImageLoaded && !this.chatInfo.name && !this.chatInfo.groupName ? html`account_circle` : html`` } - ${!this.isImageLoaded && this.chatInfo.name ? html`
    ${this.chatInfo.name.charAt(0)}
    `: ''} - ${!this.isImageLoaded && this.chatInfo.groupName ? html`
    ${this.chatInfo.groupName.charAt(0)}
    `: ''} + ${!this.isImageLoaded && this.chatInfo.name ? html`
    ${this.chatInfo.name.charAt(0)}
    `: ''} + ${!this.isImageLoaded && this.chatInfo.groupName ? html`
    ${this.chatInfo.groupName.charAt(0)}
    `: ''} +
    -
    ${this.chatInfo.groupName ? this.chatInfo.groupName : this.chatInfo.name !== undefined ? this.chatInfo.name : this.chatInfo.address.substr(0, 15)} ${this.chatInfo.groupId !== undefined ? 'lock_open' : 'lock'}
    +
    ${this.chatInfo.groupName ? this.chatInfo.groupName : this.chatInfo.name !== undefined ? this.chatInfo.name : this.chatInfo.address.substr(0, 15)} ${this.chatInfo.groupId !== undefined ? 'lock_open' : 'lock'}
    +
    +
    +
    +
    + + ${translate('chatpage.cchange90')} +
    +
    +
    +
    +
  • ` } - firstUpdated() { + async firstUpdated() { let configLoaded = false + this.lastReadMessageTimestamp = await chatLastSeen.getItem(this.chatInfo.url) || 0 parentEpml.ready().then(() => { parentEpml.subscribe('selected_address', async selectedAddress => { this.selectedAddress = {} @@ -142,6 +194,15 @@ class ChatHead extends LitElement { if (!selectedAddress || Object.entries(selectedAddress).length === 0) return this.selectedAddress = selectedAddress }) + parentEpml.subscribe('chat_last_seen', async chatList => { + const parsedChatList = JSON.parse(chatList) + const findChatSeen = parsedChatList.find(chat=> chat.key === this.chatInfo.url) + + if(findChatSeen && this.lastReadMessageTimestamp !== findChatSeen.timestamp){ + this.lastReadMessageTimestamp = findChatSeen.timestamp + this.requestUpdate() + } + }) parentEpml.subscribe('config', c => { if (!configLoaded) { configLoaded = true @@ -156,6 +217,9 @@ class ChatHead extends LitElement { if(changedProperties.has('activeChatHeadUrl')){ return true } + if(changedProperties.has('lastReadMessageTimestamp')){ + return true + } if(changedProperties.has('chatInfo')){ return true } diff --git a/qortal-ui-plugins/plugins/core/components/ChatPage.js b/qortal-ui-plugins/plugins/core/components/ChatPage.js index 91691e05..8aacdc1b 100644 --- a/qortal-ui-plugins/plugins/core/components/ChatPage.js +++ b/qortal-ui-plugins/plugins/core/components/ChatPage.js @@ -10,7 +10,7 @@ import Highlight from '@tiptap/extension-highlight' import {unsafeHTML} from 'lit/directives/unsafe-html.js'; import { Editor, Extension } from '@tiptap/core' -// import localForage from "localforage"; +import localForage from "localforage"; registerTranslateConfig({ loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) }); @@ -42,9 +42,9 @@ import WebWorker from 'web-worker:./computePowWorker.js'; import WebWorkerImage from 'web-worker:./computePowWorkerImage.js'; import '@polymer/paper-dialog/paper-dialog.js' -// const messagesCache = localForage.createInstance({ -// name: "messages-cache", -// }); +const chatLastSeen = localForage.createInstance({ + name: "chat-last-seen", +}); const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -1444,6 +1444,14 @@ class ChatPage extends LitElement { document.removeEventListener('keydown', this.initialChat); document.removeEventListener('paste', this.pasteImage); + if(this.messagesRendered.length !== 0){ + window.parent.reduxStore.dispatch( window.parent.reduxAction.addChatLastSeen({ + key: this.chatId, + timestamp: Date.now() + })) + + } + } initialChat(e) { @@ -1465,9 +1473,7 @@ class ChatPage extends LitElement { const handleTransferIntoURL = (dataTransfer) => { try { const [firstItem] = dataTransfer.items; - console.log({firstItem}); const blob = firstItem.getAsFile(); - console.log({blob}); return blob; } catch (error) { console.log(error); diff --git a/qortal-ui-plugins/plugins/core/components/TimeAgo.js b/qortal-ui-plugins/plugins/core/components/TimeAgo.js index ca3633b7..66164179 100644 --- a/qortal-ui-plugins/plugins/core/components/TimeAgo.js +++ b/qortal-ui-plugins/plugins/core/components/TimeAgo.js @@ -19,7 +19,7 @@ class TimeAgo extends LitElement { updated(changedProps) { changedProps.forEach((OldProp, name) => { - if (name === 'timeIso') { + if (name === 'timeIso' || name === 'timestamp') { this.renderTime(this.timestamp) } }); @@ -35,7 +35,6 @@ class TimeAgo extends LitElement { } render() { - return html` ` From 24e1028e37aacb99b8777fa002cfd7abe1b25d8f Mon Sep 17 00:00:00 2001 From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com> Date: Sat, 4 Feb 2023 14:07:17 +0100 Subject: [PATCH 03/17] add hide ticker button --- qortal-ui-core/language/de.json | 3 ++- qortal-ui-core/language/es.json | 3 ++- qortal-ui-core/language/fr.json | 3 ++- qortal-ui-core/language/hindi.json | 3 ++- qortal-ui-core/language/hr.json | 3 ++- qortal-ui-core/language/hu.json | 3 ++- qortal-ui-core/language/it.json | 3 ++- qortal-ui-core/language/ko.json | 3 ++- qortal-ui-core/language/no.json | 3 ++- qortal-ui-core/language/pl.json | 5 +++-- qortal-ui-core/language/pt.json | 3 ++- qortal-ui-core/language/ro.json | 3 ++- qortal-ui-core/language/rs.json | 3 ++- qortal-ui-core/language/ru.json | 3 ++- qortal-ui-core/language/us.json | 3 ++- qortal-ui-core/language/zhc.json | 3 ++- qortal-ui-core/language/zht.json | 3 ++- qortal-ui-core/src/components/app-view.js | 25 +++++++++++++++++++++-- 18 files changed, 58 insertions(+), 20 deletions(-) diff --git a/qortal-ui-core/language/de.json b/qortal-ui-core/language/de.json index 00f413af..f55a563e 100644 --- a/qortal-ui-core/language/de.json +++ b/qortal-ui-core/language/de.json @@ -657,7 +657,8 @@ "gchange55": "Private Gruppe suchen", "gchange56": "Zu suchender Gruppenname", "gchange57": "Privater Gruppenname nicht gefunden", - "gchange58": "Beachten Sie, dass der Gruppenname genau übereinstimmen muss." + "gchange58": "Beachten Sie, dass der Gruppenname genau übereinstimmen muss.", + "gchange59": "Ticker ein-/ausblenden" }, "puzzlepage": { "pchange1": "Rätsel", diff --git a/qortal-ui-core/language/es.json b/qortal-ui-core/language/es.json index 1c378f28..b7c9c8ba 100644 --- a/qortal-ui-core/language/es.json +++ b/qortal-ui-core/language/es.json @@ -657,7 +657,8 @@ "gchange55": "Buscar grupo privado", "gchange56": "Nombre del grupo a buscar", "gchange57": "Nombre de grupo privado no encontrado", - "gchange58": "Tenga en cuenta que el nombre del grupo debe coincidir exactamente." + "gchange58": "Tenga en cuenta que el nombre del grupo debe coincidir exactamente.", + "gchange59": "Mostrar/ocultar teletipo" }, "puzzlepage": { "pchange1": "Rompecabezas", diff --git a/qortal-ui-core/language/fr.json b/qortal-ui-core/language/fr.json index 3aef9139..ab1adae2 100644 --- a/qortal-ui-core/language/fr.json +++ b/qortal-ui-core/language/fr.json @@ -657,7 +657,8 @@ "gchange55": "Rechercher un groupe privé", "gchange56": "Nom du groupe à rechercher", "gchange57": "Nom de groupe privé introuvable", - "gchange58": "Notez que le nom du groupe doit correspondre exactement." + "gchange58": "Notez que le nom du groupe doit correspondre exactement.", + "gchange59": "Afficher / Masquer le téléscripteur" }, "puzzlepage": { "pchange1": "Puzzles", diff --git a/qortal-ui-core/language/hindi.json b/qortal-ui-core/language/hindi.json index 1601ffdf..ac392733 100644 --- a/qortal-ui-core/language/hindi.json +++ b/qortal-ui-core/language/hindi.json @@ -658,7 +658,8 @@ "gchange55": "निजी समूह खोजें", "gchange56": "खोजने के लिए समूह का नाम", "gchange57": "निजी समूह का नाम नहीं मिला", - "gchange58": "ध्यान दें कि समूह का नाम सटीक मेल खाना चाहिए।" + "gchange58": "ध्यान दें कि समूह का नाम सटीक मेल खाना चाहिए।", + "gchange59": "टिकर दिखाएं / छुपाएं" }, "puzzlepage": { "pchange1": "पहेलि", diff --git a/qortal-ui-core/language/hr.json b/qortal-ui-core/language/hr.json index 0a18cf7c..5759c849 100644 --- a/qortal-ui-core/language/hr.json +++ b/qortal-ui-core/language/hr.json @@ -657,7 +657,8 @@ "gchange55": "Traži privatnu grupu", "gchange56": "Naziv grupe za pretraživanje", "gchange57": "Ime privatne grupe nije pronađeno", - "gchange58": "Imajte na umu da se naziv grupe mora točno podudarati." + "gchange58": "Imajte na umu da se naziv grupe mora točno podudarati.", + "gchange59": "Prikaži / sakrij ticker" }, "puzzlepage": { "pchange1": "Zagonetke", diff --git a/qortal-ui-core/language/hu.json b/qortal-ui-core/language/hu.json index e0480559..6e7e8ee9 100644 --- a/qortal-ui-core/language/hu.json +++ b/qortal-ui-core/language/hu.json @@ -657,7 +657,8 @@ "gchange55": "Keresés privát csoportban", "gchange56": "A keresendő csoport neve", "gchange57": "A privát csoport neve nem található", - "gchange58": "Ne feledje, hogy a csoport nevének pontosan meg kell egyeznie." + "gchange58": "Ne feledje, hogy a csoport nevének pontosan meg kell egyeznie.", + "gchange59": "Ticker megjelenítése / elrejtése" }, "puzzlepage": { "pchange1": "Rejtvények", diff --git a/qortal-ui-core/language/it.json b/qortal-ui-core/language/it.json index 0f3c6058..e4a5c8c2 100644 --- a/qortal-ui-core/language/it.json +++ b/qortal-ui-core/language/it.json @@ -657,7 +657,8 @@ "gchange55": "Cerca gruppo privato", "gchange56": "Nome gruppo da cercare", "gchange57": "Nome gruppo privato non trovato", - "gchange58": "Nota che il nome del gruppo deve corrispondere esattamente." + "gchange58": "Nota che il nome del gruppo deve corrispondere esattamente.", + "gchange59": "Mostra / Nascondi ticker" }, "puzzlepage": { "pchange1": "Puzzle", diff --git a/qortal-ui-core/language/ko.json b/qortal-ui-core/language/ko.json index baf03675..e5db9895 100644 --- a/qortal-ui-core/language/ko.json +++ b/qortal-ui-core/language/ko.json @@ -657,7 +657,8 @@ "gchange55": "비공개 그룹 검색", "gchange56": "검색할 그룹 이름", "gchange57": "비공개 그룹 이름을 찾을 수 없음", - "gchange58": "그룹 이름이 정확히 일치해야 합니다." + "gchange58": "그룹 이름이 정확히 일치해야 합니다.", + "gchange59": "티커 표시/숨기기" }, "puzzlepage": { "pchange1": "퍼즐", diff --git a/qortal-ui-core/language/no.json b/qortal-ui-core/language/no.json index d6833c6e..791e89b5 100644 --- a/qortal-ui-core/language/no.json +++ b/qortal-ui-core/language/no.json @@ -657,7 +657,8 @@ "gchange55": "Søk i privat gruppe", "gchange56": "Gruppenavn å søke", "gchange57": "Privat gruppenavn ikke funnet", - "gchange58": "Merk at gruppenavnet må samsvare nøyaktig." + "gchange58": "Merk at gruppenavnet må samsvare nøyaktig.", + "gchange59": "Vis / Skjul Ticker" }, "puzzlepage": { "pchange1": "Puzzles", diff --git a/qortal-ui-core/language/pl.json b/qortal-ui-core/language/pl.json index 32935439..3100be86 100644 --- a/qortal-ui-core/language/pl.json +++ b/qortal-ui-core/language/pl.json @@ -657,7 +657,8 @@ "gchange55": "Wyszukaj grupę prywatną", "gchange56": "Nazwa grupy do wyszukania", "gchange57": "Nie znaleziono nazwy grupy prywatnej", - "gchange58": "Zauważ, że nazwa grupy musi dokładnie pasować." + "gchange58": "Zauważ, że nazwa grupy musi dokładnie pasować.", + "gchange59": "Pokaż / Ukryj Znacznik" }, "puzzlepage": { "pchange1": "Zagadki", @@ -868,7 +869,7 @@ "inf9": "„Automatyczne kupowanie” to funkcja umożliwiająca składanie „zleceń kupna” w portalu handlowym. Te „zlecenia kupna” są widoczne tylko dla osoby, która je składa. Nie są to „publiczne” zlecenia kupna, jak np. „sprzedaże z otwartego rynku” są i NIE są przechowywane w łańcuchu blokowym Qortal. Auto Buy to funkcja interfejsu użytkownika i jako taka wymaga, aby interfejs użytkownika URUCHAMIAŁ.", "inf10": "Aby złożyć zamówienie automatycznego zakupu, kliknij przycisk „Dodaj zamówienie automatycznego zakupu” i wypełnij pole, które się pojawi. Wprowadź KWOTĘ KWARTOŚCI, którą chcesz KUPIĆ, oraz CENĘ, do której chcesz KUPIĆ. Raz zamówienie jest aktywne, Auto Buy kupi dla ciebie DO tej kwoty QORT, po MAKSYMALNIE ustalonej cenie (zaczynając od najniższego zamówienia i przesuwając się w górę).", "inf11": "Po prostu ZOSTAW DZIAŁAJĄCY UI, a Auto Buy zrobi resztę automatycznie!", - "inf12": "MOŻESZ przeglądać inne wtyczki w interfejsie użytkownika (Q-Chat, portfele itp.), ale NIE MOŻESZ ZAMKNĄĆ interfejsu użytkownika, jeśli chcesz, aby zakup automatyczny został zakończony. Pozostawienie interfejsu użytkownika „zminimalizowanego” na „pasku zadań” lub „panel” jest w porządku, o ile interfejs użytkownika pozostaje OTWARTY, Auto Buy będzie działać." + "inf12": "MOŻESZ przeglądać inne wtyczki w interfejsie użytkownika (Q-Chat, portfele itp.), ale NIE MOŻESZ ZAMKNĄĆ interfejsu użytkownika, jeśli chcesz, aby zakup automatyczny został zakończony. Pozostawienie interfejsu użytkownika „zminimalizowanego” na „pasku zadań” lub „panel” jest w porządku, o ile interfejs użytkownika pozostaje OTWARTY, Auto Buy będzie działać.", "inf13": "Kup automatycznie", "inf14": "z", "inf15": "Aktywne automatyczne zamówienia zakupu", diff --git a/qortal-ui-core/language/pt.json b/qortal-ui-core/language/pt.json index 42cda962..6e5e33b6 100644 --- a/qortal-ui-core/language/pt.json +++ b/qortal-ui-core/language/pt.json @@ -657,7 +657,8 @@ "gchange55": "Pesquisar Grupo Privado", "gchange56": "Nome do grupo para pesquisar", "gchange57": "Nome do grupo privado não encontrado", - "gchange58": "Observe que o nome do grupo deve corresponder exatamente." + "gchange58": "Observe que o nome do grupo deve corresponder exatamente.", + "gchange59": "Mostrar / Ocultar Ticker" }, "puzzlepage": { "pchange1": "Enigmas", diff --git a/qortal-ui-core/language/ro.json b/qortal-ui-core/language/ro.json index 3037c208..756c8fce 100644 --- a/qortal-ui-core/language/ro.json +++ b/qortal-ui-core/language/ro.json @@ -657,7 +657,8 @@ "gchange55": "Căutați grup privat", "gchange56": "Numele grupului de căutat", "gchange57": "Numele grupului privat nu a fost găsit", - "gchange58": "Rețineți că numele grupului trebuie să se potrivească exact." + "gchange58": "Rețineți că numele grupului trebuie să se potrivească exact.", + "gchange59": "Afișează / Ascunde Ticker" }, "puzzlepage": { "pchange1": "Puzzle-uri", diff --git a/qortal-ui-core/language/rs.json b/qortal-ui-core/language/rs.json index 791753b6..61a6f04b 100644 --- a/qortal-ui-core/language/rs.json +++ b/qortal-ui-core/language/rs.json @@ -657,7 +657,8 @@ "gchange55": "Pretraži privatnu grupu", "gchange56": "Ime grupe za pretragu", "gchange57": "Ime privatne grupe nije pronađeno", - "gchange58": "Imajte na umu da ime grupe mora potpuno da se podudara." + "gchange58": "Imajte na umu da ime grupe mora potpuno da se podudara.", + "gchange59": "Prikaži / Sakrij Oznaku" }, "puzzlepage": { "pchange1": "Slagalice", diff --git a/qortal-ui-core/language/ru.json b/qortal-ui-core/language/ru.json index cd7e54f4..dfcaa64d 100644 --- a/qortal-ui-core/language/ru.json +++ b/qortal-ui-core/language/ru.json @@ -657,7 +657,8 @@ "gchange55": "Поиск в закрытой группе", "gchange56": "Имя группы для поиска", "gchange57": "Имя частной группы не найдено", - "gchange58": "Обратите внимание, что название группы должно точно совпадать." + "gchange58": "Обратите внимание, что название группы должно точно совпадать.", + "gchange59": "Показать/скрыть бегущую строку" }, "puzzlepage": { "pchange1": "Головоломки", diff --git a/qortal-ui-core/language/us.json b/qortal-ui-core/language/us.json index 55ad9dd7..87760fd7 100644 --- a/qortal-ui-core/language/us.json +++ b/qortal-ui-core/language/us.json @@ -670,7 +670,8 @@ "gchange55": "Search Private Group", "gchange56": "Group Name To Search", "gchange57": "Private Group Name Not Found", - "gchange58": "Note that group name must exact match." + "gchange58": "Note that group name must exact match.", + "gchange59": "Show / Hide Ticker" }, "puzzlepage": { "pchange1": "Puzzles", diff --git a/qortal-ui-core/language/zhc.json b/qortal-ui-core/language/zhc.json index 4b4ccde5..57fe5ec0 100644 --- a/qortal-ui-core/language/zhc.json +++ b/qortal-ui-core/language/zhc.json @@ -670,7 +670,8 @@ "gchange55": "搜索私人群组", "gchange56": "要搜索的群组名称", "gchange57": "未找到私人群组名称", - "gchange58": "注意群组名称必须完全匹配。" + "gchange58": "注意群组名称必须完全匹配。", + "gchange59": "显示/隐藏代码" }, "puzzlepage": { "pchange1": "益智游戏", diff --git a/qortal-ui-core/language/zht.json b/qortal-ui-core/language/zht.json index f797fd5e..457d0bc4 100644 --- a/qortal-ui-core/language/zht.json +++ b/qortal-ui-core/language/zht.json @@ -670,7 +670,8 @@ "gchange55": "搜索私人群組", "gchange56": "要搜索的群組名稱", "gchange57": "未找到私人群組名稱", - "gchange58": "注意群組名稱必須完全匹配。" + "gchange58": "注意群組名稱必須完全匹配。", + "gchange59": "顯示/隱藏代碼" }, "puzzlepage": { "pchange1": "益智游戲", diff --git a/qortal-ui-core/src/components/app-view.js b/qortal-ui-core/src/components/app-view.js index cffc315f..5e9c58de 100644 --- a/qortal-ui-core/src/components/app-view.js +++ b/qortal-ui-core/src/components/app-view.js @@ -207,7 +207,7 @@ class AppView extends connect(store)(LitElement) { #balanceheader { flex: 0 0 24px; - padding: 12px 12px 20px 12px; + padding: 12px 12px 45px 12px; border-bottom: 1px solid var(--border); background: var(--sidetopbar); } @@ -329,7 +329,16 @@ class AppView extends connect(store)(LitElement) { .sideBarMenu::-webkit-scrollbar-thumb:hover { background-color: rgb(148, 146, 146); cursor: pointer; - } + } + + .balanceButton { + background-color: #03a9f4; + color: #ffffff; + margin-left: 12px; + margin-right: 12px; + padding-top: 5px; + padding-bottom: 5px; + } ` ] } @@ -426,6 +435,8 @@ class AppView extends connect(store)(LitElement) { + + @@ -1399,6 +1411,15 @@ class AppView extends connect(store)(LitElement) { await getOpenTradesARRR() } + shBalanceTicker() { + const targetDiv = this.shadowRoot.getElementById("theTicker") + if (targetDiv.style.display !== "none") { + targetDiv.style.display = "none"; + } else { + targetDiv.style.display = "inline"; + } + } + async getNodeType() { const myAppNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] const nodeAppUrl = myAppNode.protocol + '://' + myAppNode.domain + ':' + myAppNode.port From b674fd2e6980cae96d9d4106dd89a9dbc9c66018 Mon Sep 17 00:00:00 2001 From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com> Date: Sat, 4 Feb 2023 14:26:54 +0100 Subject: [PATCH 04/17] change update error string --- locales/bg.json | 2 +- locales/de.json | 2 +- locales/en.json | 2 +- locales/es.json | 2 +- locales/fr.json | 2 +- locales/it.json | 2 +- locales/ko.json | 2 +- locales/nl.json | 2 +- locales/pt.json | 2 +- locales/pt_BR.json | 2 +- locales/ru_RU.json | 2 +- locales/tr.json | 2 +- locales/uk.json | 2 +- locales/zh_CN.json | 2 +- locales/zh_TW.json | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/locales/bg.json b/locales/bg.json index 2b9de1c2..17038a8a 100644 --- a/locales/bg.json +++ b/locales/bg.json @@ -10,7 +10,7 @@ "electron_translate_7": "Актуализацията е готова за инсталиране", "electron_translate_8": "Беше изтеглена нова версия на Qortal UI.", "electron_translate_9": "Щракнете върху ИНСТАЛИРАНЕ СЕГА, за да приложите актуализация, МОЖЕ БИ ПО-КЪСНО, за да не актуализирате потребителския интерфейс.", - "electron_translate_10": "Грешка при актуализиране...", + "electron_translate_10": "Временна неуспешна актуализация, ще опитаме отново по-късно", "electron_translate_11": "ИЗТЕГЛЕТЕ АКТУАЛИЗАЦИЯТА", "electron_translate_12": "Ще бъде изтеглено ⌛️ във фонов режим!" } \ No newline at end of file diff --git a/locales/de.json b/locales/de.json index 590401f2..6761d651 100644 --- a/locales/de.json +++ b/locales/de.json @@ -10,7 +10,7 @@ "electron_translate_7": "Update zur Installation bereit", "electron_translate_8": "Eine neue Qortal-UI-Version wurde heruntergeladen.", "electron_translate_9": "Klicken Sie auf JETZT INSTALLIEREN, um das Update anzuwenden, VIELLEICHT SPÄTER, um die Benutzeroberfläche nicht zu aktualisieren.", - "electron_translate_10": "Fehler beim Aktualisieren...", + "electron_translate_10": "Vorübergehender Aktualisierungsfehler, wir versuchen es später erneut", "electron_translate_11": "UPDATE HERUNTERLADEN", "electron_translate_12": "Das Update wird im Hintergrund heruntergeladen ⌛️!" } \ No newline at end of file diff --git a/locales/en.json b/locales/en.json index a10a2de0..177e5ca7 100644 --- a/locales/en.json +++ b/locales/en.json @@ -10,7 +10,7 @@ "electron_translate_7": "Update ready to install", "electron_translate_8": "A new Qortal UI version has been downloaded.", "electron_translate_9": "Click INSTALL NOW to apply update, MAYBE LATER to not update the UI.", - "electron_translate_10": "Error while Updating...", + "electron_translate_10": "Temporary update failure, will try again later", "electron_translate_11": "DOWNLOAD UPDATE", "electron_translate_12": "It will be downloaded ⌛️ in the background!" } \ No newline at end of file diff --git a/locales/es.json b/locales/es.json index 552305c9..9aec6683 100644 --- a/locales/es.json +++ b/locales/es.json @@ -10,7 +10,7 @@ "electron_translate_7": "Actualización lista para instalar", "electron_translate_8": "Se ha descargado una nueva versión de la interfaz de usuario de Qortal.", "electron_translate_9": "Haz clic en INSTALAR AHORA para aplicar la actualización, QUIZÁS MÁS TARDE para no actualizar la interfaz de usuario"., - "electron_translate_10": "Error al actualizar...", + "electron_translate_10": "Error de actualización temporal, lo intentaré más tarde", "electron_translate_11": "DESCARGAR ACTUALIZACIÓN", "electron_translate_12": "¡Se descargará ⌛️ en segundo plano!" } \ No newline at end of file diff --git a/locales/fr.json b/locales/fr.json index 624cbdee..4b8a821e 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -10,7 +10,7 @@ "electron_translate_7": "Mise à jour prête à installer", "electron_translate_8": "Une nouvelle version de l'interface utilisateur de Qortal a été téléchargée.", "electron_translate_9": "Cliquez sur INSTALLER MAINTENANT pour appliquer la mise à jour, PEUT-ÊTRE PLUS TARD pour ne pas mettre à jour l'interface utilisateur.", - "electron_translate_10": "Erreur lors de la mise à jour...", + "electron_translate_10": "Échec de la mise à jour temporaire, réessayera plus tard", "electron_translate_11": "TÉLÉCHARGER LA MISE À JOUR", "electron_translate_12": "Il sera téléchargé ⌛️ en arrière-plan !" } \ No newline at end of file diff --git a/locales/it.json b/locales/it.json index bd851cd6..de35772c 100644 --- a/locales/it.json +++ b/locales/it.json @@ -10,7 +10,7 @@ "electron_translate_7": "Aggiornamento pronto per l'installazione", "electron_translate_8": "È stata scaricata una nuova versione dell'interfaccia utente di Qortal.", "electron_translate_9": "Fai clic su INSTALLA ORA per applicare l'aggiornamento, FORSE DOPO per non aggiornare l'interfaccia utente.", - "electron_translate_10": "Errore durante l'aggiornamento...", + "electron_translate_10": "Errore di aggiornamento temporaneo, riproverà più tardi", "electron_translate_11": "SCARICA AGGIORNAMENTO", "electron_translate_12": "Verrà scaricato ⌛️ in background!" } \ No newline at end of file diff --git a/locales/ko.json b/locales/ko.json index 65f679d4..3b89345d 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -10,7 +10,7 @@ "electron_translate_7": "업데이트 설치 준비 완료", "electron_translate_8": "새로운 Qortal UI 버전이 다운로드되었습니다.", "electron_translate_9": "업데이트를 적용하려면 지금 설치를 클릭하고 UI를 업데이트하지 않으려면 나중에 할 수도 있습니다.", - "electron_translate_10": "업데이트 중 오류...", + "electron_translate_10": "임시 업데이트 실패, 나중에 다시 시도합니다.", "electron_translate_11": "업데이트 다운로드", "electron_translate_12": "백그라운드에서 ⌛️ 다운로드됩니다!" } \ No newline at end of file diff --git a/locales/nl.json b/locales/nl.json index 73756911..82bd482f 100644 --- a/locales/nl.json +++ b/locales/nl.json @@ -10,7 +10,7 @@ "electron_translate_7": "Update klaar om te installeren", "electron_translate_8": "Er is een nieuwe Qortal UI-versie gedownload.", "electron_translate_9": "Klik op NU INSTALLEREN om de update toe te passen, MISSCHIEN LATER om de gebruikersinterface niet bij te werken.", - "electron_translate_10": "Fout tijdens updaten...", + "electron_translate_10": "Tijdelijke update mislukt, zal het later opnieuw proberen", "electron_translate_11": "UPDATE DOWNLOADEN", "electron_translate_12": "Het wordt ⌛️ op de achtergrond gedownload!" } \ No newline at end of file diff --git a/locales/pt.json b/locales/pt.json index 516e26cd..7a02c1b5 100644 --- a/locales/pt.json +++ b/locales/pt.json @@ -10,7 +10,7 @@ "electron_translate_7": "Atualização pronta para instalar", "electron_translate_8": "Uma nova versão Qortal UI foi baixada.", "electron_translate_9": "Clique em INSTALAR AGORA para aplicar a atualização, TALVEZ MAIS TARDE para não atualizar a UI.", - "electron_translate_10": "Erro ao atualizar...", + "electron_translate_10": "Falha de atualização temporária, tentará novamente mais tarde", "electron_translate_11": "BAIXAR ATUALIZAÇÃO", "electron_translate_12": "Será baixado ⌛️ em segundo plano!" } \ No newline at end of file diff --git a/locales/pt_BR.json b/locales/pt_BR.json index 6e272b8d..9293187f 100644 --- a/locales/pt_BR.json +++ b/locales/pt_BR.json @@ -10,7 +10,7 @@ "electron_translate_7": "Atualização pronta para instalar", "electron_translate_8": "Uma nova versão Qortal UI foi baixada.", "electron_translate_9": "Clique em INSTALAR AGORA para aplicar a atualização, TALVEZ MAIS TARDE para não atualizar a UI.", - "electron_translate_10": "Erro ao atualizar...", + "electron_translate_10": "Falha de atualização temporária, tentará novamente mais tarde", "electron_translate_11": "BAIXAR ATUALIZAÇÃO", "electron_translate_12": "Será baixado ⌛️ em segundo plano!" } \ No newline at end of file diff --git a/locales/ru_RU.json b/locales/ru_RU.json index c0f6ff7c..09a1e79d 100644 --- a/locales/ru_RU.json +++ b/locales/ru_RU.json @@ -10,7 +10,7 @@ "electron_translate_7": "Обновление готово к установке", "electron_translate_8": "Загружена новая версия пользовательского интерфейса Qortal.", "electron_translate_9": "Нажмите УСТАНОВИТЬ СЕЙЧАС, чтобы применить обновление, МОЖЕТ БЫТЬ ПОЗЖЕ, чтобы не обновлять пользовательский интерфейс.", - "electron_translate_10": "Ошибка при обновлении...", + "electron_translate_10": "Временная ошибка обновления, повторите попытку позже", "electron_translate_11": "СКАЧАТЬ ОБНОВЛЕНИЕ", "electron_translate_12": "Он будет загружен ⌛️ в фоновом режиме!" } \ No newline at end of file diff --git a/locales/tr.json b/locales/tr.json index 11491409..b3b089f2 100644 --- a/locales/tr.json +++ b/locales/tr.json @@ -10,7 +10,7 @@ "electron_translate_7": "Güncelleme yüklenmeye hazır", "electron_translate_8": "Yeni bir Qortal UI sürümü indirildi.", "electron_translate_9": "Güncellemeyi uygulamak için ŞİMDİ YÜKLE'ye tıklayın, kullanıcı arayüzünü güncellememek için MAYBE SONRA tıklayın.", - "electron_translate_10": "Güncelleme Sırasında Hata...", + "electron_translate_10": "Geçici güncelleme hatası, daha sonra tekrar denenecek", "electron_translate_11": "GÜNCELLEMEYİ İNDİRİN", "electron_translate_12": "Arka planda ⌛️ indirilecek!" } \ No newline at end of file diff --git a/locales/uk.json b/locales/uk.json index 1e52aca0..a3ef9499 100644 --- a/locales/uk.json +++ b/locales/uk.json @@ -10,7 +10,7 @@ "electron_translate_7": "Update ready to install", "electron_translate_8": "A new Qortal UI version has been downloaded.", "electron_translate_9": "Click INSTALL NOW to apply update, MAYBE LATER to not update the UI.", - "electron_translate_10": "Error while Updating...", + "electron_translate_10": "Temporary update failure, will try again later", "electron_translate_11": "DOWNLOAD UPDATE", "electron_translate_12": "It will be downloaded ⌛️ in the background!" } \ No newline at end of file diff --git a/locales/zh_CN.json b/locales/zh_CN.json index 7fe1625d..b0f3e0e4 100644 --- a/locales/zh_CN.json +++ b/locales/zh_CN.json @@ -10,7 +10,7 @@ "electron_translate_7": "更新准备安装", "electron_translate_8": "已下载新的 Qortal UI 版本。", "electron_translate_9": "点击现在安装应用更新,可能稍后不更新用户界面。", - "electron_translate_10": "更新时出错...", + "electron_translate_10": "暂时更新失败,稍后再试", "electron_translate_11": "下载更新", "electron_translate_12": "它将在后台下载 ⌛️!" } \ No newline at end of file diff --git a/locales/zh_TW.json b/locales/zh_TW.json index 07182899..ae8699a5 100644 --- a/locales/zh_TW.json +++ b/locales/zh_TW.json @@ -10,7 +10,7 @@ "electron_translate_7": "更新準備安裝", "electron_translate_8": "已下載新的 Qortal UI 版本。", "electron_translate_9": "點擊現在安裝應用更新,可能稍後不更新用戶界面。", - "electron_translate_10": "更新時出錯...", + "electron_translate_10": "暫時更新失敗,稍後再試", "electron_translate_11": "下載更新", "electron_translate_12": "它將在後台下載 ⌛️!" } \ No newline at end of file From fe9af1dc828f07e0bfc8b2975e94b64d801b39f1 Mon Sep 17 00:00:00 2001 From: Phillip Date: Sat, 4 Feb 2023 17:34:43 +0200 Subject: [PATCH 05/17] fix avatar issue --- .../plugins/core/components/ChatHead.js | 22 ++++++++++++++----- .../core/messaging/q-chat/q-chat.src.js | 8 +++---- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/qortal-ui-plugins/plugins/core/components/ChatHead.js b/qortal-ui-plugins/plugins/core/components/ChatHead.js index 7b706e0c..61a30fb2 100644 --- a/qortal-ui-plugins/plugins/core/components/ChatHead.js +++ b/qortal-ui-plugins/plugins/core/components/ChatHead.js @@ -108,9 +108,10 @@ class ChatHead extends LitElement { this.isImageLoaded = false this.imageFetches = 0 this.lastReadMessageTimestamp = 0 + this.loggedInAddress = window.parent.reduxStore.getState().app.selectedAddress.address } - createImage(imageUrl) { + createImage(imageUrl) { const imageHTMLRes = new Image(); imageHTMLRes.src = imageUrl; imageHTMLRes.style= "width:40px; height:40px; float: left; border-radius:50%"; @@ -125,7 +126,7 @@ class ChatHead extends LitElement { setTimeout(() => { this.imageFetches = this.imageFetches + 1; imageHTMLRes.src = imageUrl; - }, 500); + }, 750); } else { @@ -134,9 +135,9 @@ class ChatHead extends LitElement { }; return imageHTMLRes; } - updated(){ - } + + render() { let avatarImg = ''; let backupAvatarImg = '' @@ -158,7 +159,10 @@ class ChatHead extends LitElement { if(this.activeChatHeadUrl === this.chatInfo.url){ isUnread = false } - + + if(this.chatInfo.sender === this.loggedInAddress){ + isUnread = false + } return html`
  • this.getUrl(this.chatInfo.url)} class="clearfix ${this.activeChatHeadUrl === this.chatInfo.url ? 'active' : ''}"> ${this.isImageLoaded ? html`${avatarImg}` : html`` } @@ -221,6 +225,14 @@ class ChatHead extends LitElement { return true } if(changedProperties.has('chatInfo')){ + + const prevChatInfo = changedProperties.get('chatInfo') + + if(prevChatInfo.address !== this.chatInfo.address){ + + this.isImageLoaded = false + this.requestUpdate() + } return true } diff --git a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js index fbe12aa5..872802d6 100644 --- a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js +++ b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js @@ -8,6 +8,7 @@ import { Epml } from '../../../../epml.js'; import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate'; import { qchatStyles } from './q-chat-css.src.js' import WebWorker from 'web-worker:./computePowWorker.src.js'; +import {repeat} from 'lit/directives/repeat.js'; registerTranslateConfig({ loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) @@ -856,14 +857,11 @@ class Chat extends LitElement { } renderChatHead(chatHeadArr) { - - let tempUrl = document.location.href - let splitedUrl = decodeURI(tempUrl).split('?') - // let activeChatHeadUrl = splitedUrl[1] === undefined ? '' : splitedUrl[1] - + return chatHeadArr.map(eachChatHead => { return html` this.setActiveChatHeadUrl(val)} chatInfo=${JSON.stringify(eachChatHead)}>` }) + } renderChatPage() { From 96e235ef92846e72b41489428fc19d8eb35c0962 Mon Sep 17 00:00:00 2001 From: QuickMythril Date: Sat, 4 Feb 2023 23:11:15 -0500 Subject: [PATCH 06/17] Fix error due to duplicate line SyntaxError: Identifier 'Highlight' has already been declared --- qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js index b62fea3f..e618a1b0 100644 --- a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js +++ b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js @@ -32,7 +32,6 @@ import Placeholder from '@tiptap/extension-placeholder' import Highlight from '@tiptap/extension-highlight' import { Editor, Extension } from '@tiptap/core' -import Highlight from '@tiptap/extension-highlight' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) class Chat extends LitElement { @@ -982,4 +981,4 @@ class Chat extends LitElement { } } -window.customElements.define('q-chat', Chat) \ No newline at end of file +window.customElements.define('q-chat', Chat) From 330f556f15020c40d064a0c573672666e115c61c Mon Sep 17 00:00:00 2001 From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com> Date: Sun, 5 Feb 2023 13:36:14 +0100 Subject: [PATCH 07/17] Update Translations --- qortal-ui-core/language/de.json | 17 +++++++++++++++-- qortal-ui-core/language/es.json | 17 +++++++++++++++-- qortal-ui-core/language/fr.json | 17 +++++++++++++++-- qortal-ui-core/language/hindi.json | 17 +++++++++++++++-- qortal-ui-core/language/hr.json | 17 +++++++++++++++-- qortal-ui-core/language/hu.json | 17 +++++++++++++++-- qortal-ui-core/language/it.json | 17 +++++++++++++++-- qortal-ui-core/language/ko.json | 17 +++++++++++++++-- qortal-ui-core/language/no.json | 17 +++++++++++++++-- qortal-ui-core/language/pl.json | 17 +++++++++++++++-- qortal-ui-core/language/pt.json | 17 +++++++++++++++-- qortal-ui-core/language/ro.json | 17 +++++++++++++++-- qortal-ui-core/language/rs.json | 17 +++++++++++++++-- qortal-ui-core/language/ru.json | 17 +++++++++++++++-- qortal-ui-core/language/us.json | 3 +-- 15 files changed, 211 insertions(+), 30 deletions(-) diff --git a/qortal-ui-core/language/de.json b/qortal-ui-core/language/de.json index f55a563e..326683b0 100644 --- a/qortal-ui-core/language/de.json +++ b/qortal-ui-core/language/de.json @@ -574,7 +574,12 @@ "cchange65": "Bitte geben Sie einen Empfänger ein", "cchange66": "Beantwortete Nachricht kann nicht abgerufen werden. Nachricht ist zu alt.", "cchange68": "bearbeitet", - "cchange69": "Zeige Bilder automatisch" + "cchange69": "Zeige Bilder automatisch", + "cchange70": "Dieser Bildtyp wird nicht unterstützt", + "cchange71": "und", + "cchange72": "andere", + "cchange73": "s", + "cchange74": "reagiert mit" }, "welcomepage": { "wcchange1": "Willkommen zu Q-Chat", @@ -597,7 +602,15 @@ "bcchange7": "MENÜ", "bcchange8": "Adresse Kopieren", "bcchange9": "Private Nachricht", - "bcchange10": "Mehr" + "bcchange10": "Mehr", + "bcchange11": "Antworten", + "bcchange12": "Bearbeiten", + "bcchange13": "Reaktion", + "bcchange14": "Weiterleiten", + "bcchange15": "Nachricht weitergeleitet", + "bcchange16": "Empfänger auswählen oder darunter suchen", + "bcchange17": "WEITERGELEITET", + "bcchange18": "Tipp Benutzer" }, "grouppage": { "gchange1": "Qortal-Gruppen", diff --git a/qortal-ui-core/language/es.json b/qortal-ui-core/language/es.json index b7c9c8ba..82e6dce4 100644 --- a/qortal-ui-core/language/es.json +++ b/qortal-ui-core/language/es.json @@ -574,7 +574,12 @@ "cchange65": "Ingrese un destinatario", "cchange66": "No se puede recuperar el mensaje respondido. El mensaje es demasiado antiguo.", "cchange68": "editado", - "cchange69": "Mostrar imágenes automáticamente" + "cchange69": "Mostrar imágenes automáticamente", + "cchange70": "Este tipo de imagen no es compatible", + "cchange71": "y", + "cchange72": "otro", + "cchange73": "s", + "cchange74": "reaccionó con" }, "welcomepage": { "wcchange1": "Bienvenido al Q-Chat", @@ -597,7 +602,15 @@ "bcchange7": "MENÚ", "bcchange8": "Copiar Dirección", "bcchange9": "Mensaje Privado", - "bcchange10": "Más" + "bcchange10": "Más", + "bcchange11": "Responder", + "bcchange12": "Editar", + "bcchange13": "Reacción", + "bcchange14": "Adelante", + "bcchange15": "Mensaje reenviado", + "bcchange16": "Elegir destinatario o buscar uno a continuación", + "bcchange17": "REENVIADO", + "bcchange18": "Sugerencia para el usuario" }, "grouppage": { "gchange1": "Grupos Qortal", diff --git a/qortal-ui-core/language/fr.json b/qortal-ui-core/language/fr.json index ab1adae2..62cd43e1 100644 --- a/qortal-ui-core/language/fr.json +++ b/qortal-ui-core/language/fr.json @@ -574,7 +574,12 @@ "cchange65": "Veuillez saisir un destinataire", "cchange66": "Impossible de récupérer le message auquel vous avez répondu. Le message est trop ancien.", "cchange68": "modifié", - "cchange69": "Afficher automatiquement les images" + "cchange69": "Afficher automatiquement les images", + "cchange70": "Ce type d'image n'est pas pris en charge", + "cchange71": "et", + "cchange72": "autre", + "cchange73": "s", + "cchange74": "a réagi avec" }, "welcomepage": { "wcchange1": "Bienvenue dans Q-Chat", @@ -597,7 +602,15 @@ "bcchange7": "MENU", "bcchange8": "Copier l'Adresse", "bcchange9": "Message Privé", - "bcchange10": "Suite" + "bcchange10": "Suite", + "bcchange11": "Répondre", + "bcchange12": "Modifier", + "bcchange13": "Réaction", + "bcchange14": "En avant", + "bcchange15": "Message transféré", + "bcchange16": "Choisissez le destinataire ou recherchez-en un ci-dessous", + "bcchange17": "TRANSMIS", + "bcchange18": "Astuce à l'utilisateur" }, "grouppage": { "gchange1": "Groupes Qortal", diff --git a/qortal-ui-core/language/hindi.json b/qortal-ui-core/language/hindi.json index ac392733..2ef18b37 100644 --- a/qortal-ui-core/language/hindi.json +++ b/qortal-ui-core/language/hindi.json @@ -575,7 +575,12 @@ "cchange65": "कृपया एक प्राप्तकर्ता दर्ज करें", "cchange66": "इसका उत्तर दिया गया संदेश प्राप्त नहीं किया जा सकता। संदेश बहुत पुराना है।", "cchange68": "संपादित", - "cchange69": "ऑटो-शो छवियां" + "cchange69": "ऑटो-शो छवियां", + "cchange70": "यह छवि प्रकार समर्थित नहीं है", + "cchange71": "और", + "cchange72": "अन्य", + "cchange73": "s", + "cchange74": "के साथ प्रतिक्रिया" }, "welcomepage": { "wcchange1": "क्यू-चैट में आपका स्वागत है", @@ -598,7 +603,15 @@ "bcchange7": "मेन्यू", "bcchange8": "कॉपी पता", "bcchange9": "निजी संदेश", - "bcchange10": "अधिक" + "bcchange10": "अधिक", + "bcchange11": "उत्तर", + "bcchange12": "संपादित करें", + "bcchange13": "प्रतिक्रिया", + "bcchange14": "आगे", + "bcchange15": "संदेश अग्रेषित किया गया", + "bcchange16": "प्राप्तकर्ता चुनें या नीचे किसी को खोजें", + "bcchange17": "अग्रेषित", + "bcchange18": "टिप उपयोगकर्ता" }, "grouppage": { "gchange1": "क्वॉर्टल समूह", diff --git a/qortal-ui-core/language/hr.json b/qortal-ui-core/language/hr.json index 5759c849..26fc0d4a 100644 --- a/qortal-ui-core/language/hr.json +++ b/qortal-ui-core/language/hr.json @@ -574,7 +574,12 @@ "cchange65": "Molimo unesite primatelja", "cchange66": "Ne mogu dohvatiti poruku s odgovorom. Poruka je prestara.", "cchange68": "uređeno", - "cchange69": "Automatsko prikazivanje slika" + "cchange69": "Automatsko prikazivanje slika", + "cchange70": "Ova vrsta slike nije podržana", + "cchange71": "i", + "cchange72": "ostalo", + "cchange73": "s", + "cchange74": "reagirao sa" }, "welcomepage": { "wcchange1": "Dobrodošli u Q-Čavrljanje", @@ -597,7 +602,15 @@ "bcchange7": "MENI", "bcchange8": "Kopiraj Adresu", "bcchange9": "Privatna Poruka", - "bcchange10": "Više" + "bcchange10": "Više", + "bcchange11": "Odgovori", + "bcchange12": "Uredi", + "bcchange13": "Reakcija", + "bcchange14": "Naprijed", + "bcchange15": "Poruka proslijeđena", + "bcchange16": "Odaberite primatelja ili potražite jednog ispod", + "bcchange17": "PROSLJEĐENO", + "bcchange18": "Savjet korisniku" }, "grouppage": { "gchange1": "Qortal Grupe", diff --git a/qortal-ui-core/language/hu.json b/qortal-ui-core/language/hu.json index 6e7e8ee9..d92390cf 100644 --- a/qortal-ui-core/language/hu.json +++ b/qortal-ui-core/language/hu.json @@ -574,7 +574,12 @@ "cchange65": "Kérjük, adjon meg egy címzettet", "cchange66": "Nem sikerült lekérni a válaszolt üzenetet. Az üzenet túl régi.", "cchange68": "szerkesztve", - "cchange69": "Képek automatikus megjelenítése" + "cchange69": "Képek automatikus megjelenítése", + "cchange70": "Ez a képtípus nem támogatott", + "cchange71": "és", + "cchange72": "egyéb", + "cchange73": "s", + "cchange74": "reagált:" }, "welcomepage": { "wcchange1": "Üdvözöljük a Q-Chathoz", @@ -597,7 +602,15 @@ "bcchange7": "MENÜ", "bcchange8": "Cím Másolása", "bcchange9": "Privát Üzenet", - "bcchange10": "Több" + "bcchange10": "Több", + "bcchange11": "Válasz", + "bcchange12": "Szerkesztés", + "bcchange13": "Reakció", + "bcchange14": "Tovább", + "bcchange15": "Üzenet továbbítva", + "bcchange16": "Válasszon címzettet vagy keressen egyet lent", + "bcchange17": "TOVÁLTVA", + "bcchange18": "Tipp felhasználó" }, "grouppage": { "gchange1": "Qortal Csoportok", diff --git a/qortal-ui-core/language/it.json b/qortal-ui-core/language/it.json index e4a5c8c2..1523e212 100644 --- a/qortal-ui-core/language/it.json +++ b/qortal-ui-core/language/it.json @@ -574,7 +574,12 @@ "cchange65": "Inserisci un destinatario", "cchange66": "Impossibile recuperare il messaggio di risposta. Il messaggio è troppo vecchio.", "cchange68": "modificato", - "cchange69": "Mostra automaticamente le immagini" + "cchange69": "Mostra automaticamente le immagini", + "cchange70": "Questo tipo di immagine non è supportato", + "cchange71": "e", + "cchange72": "altro", + "cchange73": "s", + "cchange74": "ha reagito con" }, "welcomepage": { "wcchange1": "Benvenuto in Q-Chat", @@ -597,7 +602,15 @@ "bcchange7": "MENÙ", "bcchange8": "Copia Indirizzo", "bcchange9": "Messaggio Privato", - "bcchange10": "Di più" + "bcchange10": "Di più", + "bcchange11": "Rispondi", + "bcchange12": "Modifica", + "bcchange13": "Reazione", + "bcchange14": "Avanti", + "bcchange15": "Messaggio inoltrato", + "bcchange16": "Scegli il destinatario o cercane uno qui sotto", + "bcchange17": "INOLTRATO", + "bcchange18": "Suggerimento utente" }, "grouppage": { "gchange1": "Gruppi Qortal", diff --git a/qortal-ui-core/language/ko.json b/qortal-ui-core/language/ko.json index e5db9895..5e533527 100644 --- a/qortal-ui-core/language/ko.json +++ b/qortal-ui-core/language/ko.json @@ -574,7 +574,12 @@ "cchange65": "받는 사람을 입력하세요", "cchange66": "답장한 메시지를 가져올 수 없습니다. 메시지가 너무 오래되었습니다.", "cchange68": "편집됨", - "cchange69": "이미지 자동 표시" + "cchange69": "이미지 자동 표시", + "cchange70": "이 이미지 유형은 지원되지 않습니다", + "cchange71": "그리고", + "cchange72": "기타", + "cchange73": "들", + "cchange74": "반응" }, "welcomepage": { "wcchange1": "Q-Chat에 오신 것을 환영합니다.", @@ -597,7 +602,15 @@ "bcchange7": "메뉴", "bcchange8": "주소 복사", "bcchange9": "개인 메시지", - "bcchange10": "더" + "bcchange10": "더", + "bcchange11": "답장", + "bcchange12": "편집", + "bcchange13": "반응", + "bcchange14": "앞으로", + "bcchange15": "전달된 메시지", + "bcchange16": "받는 사람을 선택하거나 아래에서 검색하십시오", + "bcchange17": "전달됨", + "bcchange18": "팁 사용자" }, "grouppage": { "gchange1": "Qortal 그룹", diff --git a/qortal-ui-core/language/no.json b/qortal-ui-core/language/no.json index 791e89b5..1ee638af 100644 --- a/qortal-ui-core/language/no.json +++ b/qortal-ui-core/language/no.json @@ -574,7 +574,12 @@ "cchange65": "Vennligst skriv inn en mottaker", "cchange66": "Kan ikke hente besvart melding. Meldingen er for gammel.", "cchange68": "redigert", - "cchange69": "Vis bilder automatisk" + "cchange69": "Vis bilder automatisk", + "cchange70": "Denne bildetypen støttes ikke", + "cchange71": "og", + "cchange72": "annet", + "cchange73": "s", + "cchange74": "reagerte med" }, "welcomepage": { "wcchange1": "Velkommen til Q-Chat", @@ -597,7 +602,15 @@ "bcchange7": "MENY", "bcchange8": "Kopier adresse", "bcchange9": "Privat melding", - "bcchange10": "Mer" + "bcchange10": "Mer", + "bcchange11": "Svar", + "bcchange12": "Rediger", + "bcchange13": "Reaksjon", + "bcchange14": "Videresend", + "bcchange15": "Melding videresendt", + "bcchange16": "Velg mottaker eller søk etter en nedenfor", + "bcchange17": "VIDERESENDE", + "bcchange18": "Tipsbruker" }, "grouppage": { "gchange1": "Qortal-grupper", diff --git a/qortal-ui-core/language/pl.json b/qortal-ui-core/language/pl.json index 3100be86..5c75270f 100644 --- a/qortal-ui-core/language/pl.json +++ b/qortal-ui-core/language/pl.json @@ -574,7 +574,12 @@ "cchange65": "Wprowadź odbiorcę", "cchange66": "Nie można pobrać wiadomości, na którą udzielono odpowiedzi. Wiadomość jest za stara.", "cchange68": "edytowano", - "cchange69": "Automatyczne wyświetlanie obrazów" + "cchange69": "Automatyczne wyświetlanie obrazów", + "cchange70": "Ten typ obrazu nie jest obsługiwany", + "cchange71": "i", + "cchange72": "inne", + "cchange73": "s", + "cchange74": "zareagował z" }, "welcomepage": { "wcchange1": "Witamy w Q-Chat", @@ -597,7 +602,15 @@ "bcchange7": "MENU", "bcchange8": "Kopiuj Adres", "bcchange9": "Prywatna Wiadomość", - "bcchange10": "Więcej" + "bcchange10": "Więcej", + "bcchange11": "Odpowiedz", + "bcchange12": "Edytuj", + "bcchange13": "Reakcja", + "bcchange14": "Przekaż", + "bcchange15": "Wiadomość przekazana", + "bcchange16": "Wybierz odbiorcę lub wyszukaj poniżej", + "bcchange17": "PRZEKAZANA", + "bcchange18": "Użytkownik napiwku" }, "grouppage": { "gchange1": "Grupy Qortal", diff --git a/qortal-ui-core/language/pt.json b/qortal-ui-core/language/pt.json index 6e5e33b6..870b3dd3 100644 --- a/qortal-ui-core/language/pt.json +++ b/qortal-ui-core/language/pt.json @@ -574,7 +574,12 @@ "cchange65": "Insira um destinatário", "cchange66": "Não foi possível buscar a mensagem respondida. A mensagem é muito antiga.", "cchange68": "editado", - "cchange69": "Mostrar imagens automaticamente" + "cchange69": "Mostrar imagens automaticamente", + "cchange70": "Este tipo de imagem não é suportado", + "cchange71": "e", + "cchange72": "outro", + "cchange73": "s", + "cchange74": "reagiu com" }, "welcomepage": { "wcchange1": "Bem-vindo ao Q-Chat", @@ -597,7 +602,15 @@ "bcchange7": "MENU", "bcchange8": "Copiar Endereço", "bcchange9": "Mensagem Privada", - "bcchange10": "Mais" + "bcchange10": "Mais", + "bcchange11": "Responder", + "bcchange12": "Editar", + "bcchange13": "Reação", + "bcchange14": "Avançar", + "bcchange15": "Mensagem encaminhada", + "bcchange16": "Escolha o destinatário ou procure um abaixo", + "bcchange17": "ENCAMINHADO", + "bcchange18": "Dica de usuário" }, "grouppage": { "gchange1": "Grupos Qortal", diff --git a/qortal-ui-core/language/ro.json b/qortal-ui-core/language/ro.json index 756c8fce..4e17e959 100644 --- a/qortal-ui-core/language/ro.json +++ b/qortal-ui-core/language/ro.json @@ -574,7 +574,12 @@ "cchange65": "Vă rugăm să introduceți un destinatar", "cchange66": "Nu se poate prelua mesajul la care sa răspuns. Mesajul este prea vechi.", "cchange68": "editat", - "cchange69": "Afișează automat imaginile" + "cchange69": "Afișează automat imaginile", + "cchange70": "Acest tip de imagine nu este acceptat", + "cchange71": "și", + "cchange72": "altul", + "cchange73": "s", + "cchange74": "a reacționat cu" }, "welcomepage": { "wcchange1": "Bine ai venit la Q-Chat", @@ -597,7 +602,15 @@ "bcchange7": "MENIU", "bcchange8": "Copiati adresa", "bcchange9": "Mesaj privat", - "bcchange10": "Mai mult" + "bcchange10": "Mai mult", + "bcchange11": "Răspuns", + "bcchange12": "Editați", + "bcchange13": "Reacție", + "bcchange14": "Înainte", + "bcchange15": "Mesajul redirecționat", + "bcchange16": "Alegeți destinatarul sau căutați unul mai jos", + "bcchange17": "REMISE", + "bcchange18": "Sfat utilizator" }, "grouppage": { "gchange1": "Grupuri Qortal Groups", diff --git a/qortal-ui-core/language/rs.json b/qortal-ui-core/language/rs.json index 61a6f04b..e1722ca2 100644 --- a/qortal-ui-core/language/rs.json +++ b/qortal-ui-core/language/rs.json @@ -574,7 +574,12 @@ "cchange65": "Unesite primaoca", "cchange66": "Ne mogu preuzeti odgovor na poruku. Poruka je prestara.", "cchange68": "uređeno", - "cchange69": "Automatski prikaži slike" + "cchange69": "Automatski prikaži slike", + "cchange70": "Ovaj tip slike nije podržan", + "cchange71": "i", + "cchange72": "drugo", + "cchange73": "s", + "cchange74": "reagovao sa" }, "welcomepage": { "wcchange1": "Dobrodošli na Q-Chat", @@ -597,7 +602,15 @@ "bcchange7": "MENI", "bcchange8": "Kopiraj Adresu", "bcchange9": "Privatna Poruka", - "bcchange10": "Više" + "bcchange10": "Više", + "bcchange11": "Odgovori", + "bcchange12": "Izmeni", + "bcchange13": "Reakcija", + "bcchange14": "Napred", + "bcchange15": "Poruka je prosleđena", + "bcchange16": "Izaberite primaoca ili potražite jednog ispod", + "bcchange17": "PROSLEĐEN", + "bcchange18": "Korisnik saveta" }, "grouppage": { "gchange1": "Qortal Grupe", diff --git a/qortal-ui-core/language/ru.json b/qortal-ui-core/language/ru.json index dfcaa64d..ea20a79d 100644 --- a/qortal-ui-core/language/ru.json +++ b/qortal-ui-core/language/ru.json @@ -574,7 +574,12 @@ "cchange65": "Пожалуйста, введите получателя", "cchange66": "Невозможно получить ответное сообщение. Сообщение слишком старое.", "cchange68": "отредактировано", - "cchange69": "Автоматическое отображение изображений" + "cchange69": "Автоматическое отображение изображений", + "cchange70": "Этот тип изображения не поддерживается", + "cchange71": "и", + "cchange72": "другое", + "cchange73": "с", + "cchange74": "отреагировал" }, "welcomepage": { "wcchange1": "Добро пожаловать в Q-Chat", @@ -597,7 +602,15 @@ "bcchange7": "МЕНЮ", "bcchange8": "Копировать адрес", "bcchange9": "Приватное сообщение", - "bcchange10": "Более" + "bcchange10": "Более", + "bcchange11": "Ответить", + "bcchange12": "Редактировать", + "bcchange13": "Реакция", + "bcchange14": "Вперед", + "bcchange15": "Сообщение переадресовано", + "bcchange16": "Выберите получателя или найдите его ниже", + "bcchange17": "ПЕРЕДАНО", + "bcchange18": "Подсказка пользователю" }, "grouppage": { "gchange1": "Qortal группы", diff --git a/qortal-ui-core/language/us.json b/qortal-ui-core/language/us.json index 02bb9586..87760fd7 100644 --- a/qortal-ui-core/language/us.json +++ b/qortal-ui-core/language/us.json @@ -579,8 +579,7 @@ "cchange71": "and", "cchange72": "other", "cchange73": "s", - "cchange74": "reacted with", - "cchange90": "No messages" + "cchange74": "reacted with" }, "welcomepage": { "wcchange1": "Welcome to Q-Chat", From fd96605148ae7c9a42f7e6d9d6433feebd137e43 Mon Sep 17 00:00:00 2001 From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com> Date: Sun, 5 Feb 2023 13:42:19 +0100 Subject: [PATCH 08/17] Add sell name --- .../name-registration.src.js | 809 +++++++++++++++++- 1 file changed, 784 insertions(+), 25 deletions(-) diff --git a/qortal-ui-plugins/plugins/core/name-registration/name-registration.src.js b/qortal-ui-plugins/plugins/core/name-registration/name-registration.src.js index 037d9d85..1e3e0289 100644 --- a/qortal-ui-plugins/plugins/core/name-registration/name-registration.src.js +++ b/qortal-ui-plugins/plugins/core/name-registration/name-registration.src.js @@ -7,11 +7,17 @@ registerTranslateConfig({ loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) }) -import '@material/mwc-icon' import '@material/mwc-button' -import '@material/mwc-textfield' import '@material/mwc-dialog' +import '@material/mwc-formfield' +import '@material/mwc-icon' +import '@material/mwc-icon-button' +import '@material/mwc-textfield' import '@polymer/paper-spinner/paper-spinner-lite.js' +import '@polymer/paper-progress/paper-progress.js' +import '@vaadin/button' +import '@vaadin/icon' +import '@vaadin/icons' import '@vaadin/grid' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -19,17 +25,32 @@ const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) class NameRegistration extends LitElement { static get properties() { return { + theme: { type: String, reflect: true }, + qortWalletBalance: { type: Number }, loading: { type: Boolean }, names: { type: Array }, + marketSellNames: { type: Array }, recipientPublicKey: { type: String }, selectedAddress: { type: Object }, btnDisable: { type: Boolean }, + isLoading: { type: Boolean }, registerNameLoading: { type: Boolean }, error: { type: Boolean }, message: { type: String }, removeError: { type: Boolean }, removeMessage: { type: String }, - theme: { type: String, reflect: true } + fee: { type: Number }, + sellFee: { type: Number }, + cancelSellFee: { type: Number }, + buyFee: { type: Number }, + toSellName: { type: String }, + toSellPrice: { type: String }, + toCancelSellName: { type: String }, + toBuyName: { type: String }, + toBuyPrice: { type: String }, + toBuySeller: { type: String }, + errorMessage: { type: String }, + successMessage: { type: String } } } @@ -37,20 +58,32 @@ class NameRegistration extends LitElement { return css` * { --mdc-theme-primary: rgb(3, 169, 244); - --mdc-theme-secondary: var(--mdc-theme-primary); --paper-input-container-focus-color: var(--mdc-theme-primary); --mdc-theme-surface: var(--white); + --mdc-text-field-outlined-idle-border-color: var(--txtfieldborder); + --mdc-text-field-outlined-hover-border-color: var(--txtfieldhoverborder); + --mdc-text-field-label-ink-color: var(--black); + --mdc-text-field-ink-color: var(--black); --mdc-dialog-content-ink-color: var(--black); + --mdc-dialog-min-width: 400px; + --mdc-dialog-max-width: 1024px; --lumo-primary-text-color: rgb(0, 167, 245); --lumo-primary-color-50pct: rgba(0, 167, 245, 0.5); --lumo-primary-color-10pct: rgba(0, 167, 245, 0.1); --lumo-primary-color: hsl(199, 100%, 48%); --lumo-base-color: var(--white); --lumo-body-text-color: var(--black); + --lumo-secondary-text-color: var(--sectxt); + --lumo-contrast-60pct: var(--vdicon); --_lumo-grid-border-color: var(--border); --_lumo-grid-secondary-border-color: var(--border2); } + [hidden] { + display: hidden !important; + visibility: none !important; + } + #name-registration-page { background: var(--white); padding: 12px 24px; @@ -78,21 +111,100 @@ class NameRegistration extends LitElement { max-height: 42px; } + paper-progress { + --paper-progress-active-color: var(--mdc-theme-primary); + } + .red { --mdc-theme-primary: #F44336; } + + .green { + --mdc-theme-primary: #198754; + } + + .buttons { + text-align: right; + } + + .card-container { + background-color: var(--white); + border-radius: 5px; + color: var(--black); + padding-top: 30px; + position: relative; + width: 350px; + max-width: 100%; + text-align: center; + } + + .successBox { + height: 34px; + min-width: 300px; + width: 100%; + border: 1px solid green; + border-radius: 5px; + background-color: transparent; + margin-top: 15px; + } + + .errorBox { + height: 34px; + min-width: 300px; + width: 100%; + border: 1px solid red; + border-radius: 5px; + background-color: transparent; + margin-top: 15px; + } + + .manage-group-dialog { + min-height: 300px; + min-width: 350px; + box-sizing: border-box; + position: relative; + } + + .btn-clear-success { + --mdc-icon-button-size: 32px; + color: red; + } + + .btn-clear-error { + --mdc-icon-button-size: 32px; + color: green; + } + + .error-icon { + font-size: 48px; + color: red; + } ` } constructor() { super() + this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light' + this.qortWalletBalance = 0 this.selectedAddress = {} this.names = [] + this.marketSellNames = [] this.recipientPublicKey = '' this.btnDisable = false + this.isLoading = false this.registerNameLoading = false this.fee = 0.001 - this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light' + this.sellFee = 0.001 + this.cancelSellFee = 0.001 + this.buyFee = 0.001 + this.toSellName = '' + this.toSellPrice = '' + this.toCancelSellName = '' + this.toBuyName = '' + this.toBuyPrice = '' + this.toBuySeller = '' + this.errorMessage = '' + this.successMessage = '' } render() { @@ -114,13 +226,38 @@ class NameRegistration extends LitElement { { render(html`${this.renderAvatarButton(data.item)}`, root) }}> + { + if (this.marketSellNames.some(e => e.owner === this.selectedAddress.address)) { + render(html`${this.renderCancelSellNameButton(data.item)}`, root) + } else { + render(html`${this.renderSellNameButton(data.item)}`, root) + } + }}> ${this.isEmptyArray(this.names) ? html` ${translate("registernamepage.nchange8")} `: ''} +

    +
    +

    ${translate("registernamepage.nchange22")}

    + + + + + { + if (data.item.owner === this.selectedAddress.address) { + render(html`${this.renderCancelSellNameButton(data.item)}`, root) + } else { + render(html`${this.renderBuyNameButton(data.item)}`, root) + } + }}> + + ${this.isEmptyArray(this.marketSellNames) ? html` + ${translate("registernamepage.nchange24")} + `: ''} +
    -
    ${translate("registernamepage.nchange9")}

    @@ -161,6 +298,204 @@ class NameRegistration extends LitElement { ${translate("general.close")}
    + + +
    +
    +

    ${translate("registernamepage.nchange19")}

    +
    +
    +
    +

    + + +

    +

    + + +

    +
    +

    ${translate("walletpage.wchange21")} ${this.sellFee} QORT

    +
    +
    + ${this.renderClearSuccess()} + ${this.renderClearError()} + ${this.isLoading ? html`` : ''} +
    +
    + this.createSellName()}> + + ${translate("registernamepage.nchange19")} + +
    +
    +
    + + ${translate("general.close")} + +
    + + +
    +
    +

    ${translate("registernamepage.nchange20")} ${translate("registernamepage.nchange5")}

    +
    +
    +
    +

    + + +

    +
    +

    ${translate("walletpage.wchange21")} ${this.cancelSellFee} QORT

    +
    +
    + ${this.renderClearSuccess()} + ${this.renderClearError()} + ${this.isLoading ? html`` : ''} +
    +
    + this.createCancelSellName()}> + + ${translate("registernamepage.nchange20")} ${translate("registernamepage.nchange5")} + +
    +
    +
    + + ${translate("general.close")} + +
    + + +
    +
    +

    ${translate("registernamepage.nchange21")}

    +
    +
    +
    +

    + + +

    +

    + + +

    +

    + + +

    +
    +

    ${translate("walletpage.wchange21")} ${this.buyFee} QORT

    +
    +
    + ${this.renderClearSuccess()} + ${this.renderClearError()} + ${this.isLoading ? html`` : ''} +
    +
    + this.openCheckFunds()}> + + ${translate("registernamepage.nchange21")} + +
    +
    +
    + + ${translate("general.close")} + +
    + + +
    + warning +

    ${translate("registernamepage.nchange35")}

    +

    ${translate("registernamepage.nchange36")}

    +
    + this.closeBuyErrorNameDialog()} + class="red" + > + ${translate("general.close")} + +
    + + +
    + warning +

    ${translate("registernamepage.nchange37")}

    +

    ${translate("registernamepage.nchange38")}

    +
    + this.closeBuyErrorPriceDialog()} + class="red" + > + ${translate("general.close")} + +
    ` } @@ -170,6 +505,9 @@ class NameRegistration extends LitElement { this.changeTheme() this.changeLanguage() this.unitFee() + this.unitSellFee() + this.unitCancelSellFee() + this.unitBuyFee() const fetchNames = () => { parentEpml.request('apiCall', { @@ -180,6 +518,15 @@ class NameRegistration extends LitElement { setTimeout(fetchNames, this.config.user.nodeSettings.pingInterval) } + const fetchMarketSellNames = async () => { + await parentEpml.request('apiCall', { + url: `/names/forsale?limit=0&reverse=true` + }).then(res => { + this.marketSellNames = res + }) + setTimeout(fetchMarketSellNames, 60000) + } + window.addEventListener("contextmenu", (event) => { event.preventDefault() this._textMenu(event) @@ -221,6 +568,7 @@ class NameRegistration extends LitElement { parentEpml.subscribe('config', c => { if (!configLoaded) { setTimeout(fetchNames, 1) + setTimeout(fetchMarketSellNames, 1) configLoaded = true } this.config = JSON.parse(c) @@ -237,11 +585,11 @@ class NameRegistration extends LitElement { changeTheme() { const checkTheme = localStorage.getItem('qortalTheme') if (checkTheme === 'dark') { - this.theme = 'dark'; + this.theme = 'dark' } else { - this.theme = 'light'; + this.theme = 'light' } - document.querySelector('html').setAttribute('theme', this.theme); + document.querySelector('html').setAttribute('theme', this.theme) } changeLanguage() { @@ -255,6 +603,50 @@ class NameRegistration extends LitElement { } } + async updateQortWalletBalance() { + let qortAddress = window.parent.reduxStore.getState().app.selectedAddress.address + + await parentEpml.request('apiCall', { + url: `/addresses/balance/${qortAddress}`, + }).then((res) => { + this.qortWalletBalance = res + }) + } + + renderClearSuccess() { + let strSuccessValue = this.successMessage + if (strSuccessValue === "") { + return html`` + } else { + return html` +
    + ${this.successMessage} + +
    +
    +

    ${translate("walletpage.wchange43")}

    +
    + ` + } + } + + renderClearError() { + let strErrorValue = this.errorMessage + if (strErrorValue === "") { + return html`` + } else { + return html` +
    + ${this.errorMessage} + +
    +
    +

    ${translate("walletpage.wchange44")}

    +
    + ` + } + } + renderCoreText() { return html`${translate("registernamepage.nchange16")}` } @@ -263,6 +655,18 @@ class NameRegistration extends LitElement { return html`${translate("registernamepage.nchange18")}` } + renderSellSuccessText() { + return html`${translate("registernamepage.nchange32")}` + } + + renderCancelSuccessText() { + return html`${translate("registernamepage.nchange33")}` + } + + renderBuySuccessText() { + return html`${translate("registernamepage.nchange34")}` + } + renderFailText() { return html`${translate("registernamepage.nchange17")}` } @@ -271,7 +675,7 @@ class NameRegistration extends LitElement { let name = nameObj.name const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port - const url = `${nodeUrl}/arbitrary/THUMBNAIL/${name}/qortal_avatar?async=true&apiKey=${this.getApiKey()}`; + const url = `${nodeUrl}/arbitrary/THUMBNAIL/${name}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` return html`` } @@ -280,28 +684,168 @@ class NameRegistration extends LitElement { } async uploadAvatar(nameObj) { - let name = encodeURIComponent(nameObj.name) + let name = nameObj.name window.location.href = `../qdn/publish/index.html?service=THUMBNAIL&identifier=qortal_avatar&name=${name}&uploadType=file&category=Avatar&showName=false&showService=false&showIdentifier=false` } + renderSellNameButton(nameObj) { + return html` this.openSellNameDialog(nameObj)}>sell ${translate("registernamepage.nchange19")}` + } + + openSellNameDialog(nameObj) { + this.toSellName = '' + this.toSellPrice = '' + this.shadowRoot.getElementById("toSellName").value = '' + this.shadowRoot.getElementById("toSellPrice").value = '' + this.toSellName = nameObj.name + this.toSellPrice = '5' + this.shadowRoot.querySelector('#sellNameDialog').show() + } + + closeSellNameDialog() { + this.shadowRoot.querySelector('#sellNameDialog').close() + this.toSellName = '' + this.toSellPrice = '' + this.shadowRoot.getElementById("toSellName").value = '' + this.shadowRoot.getElementById("toSellPrice").value = '' + } + + renderCancelSellNameButton(nameObj) { + return html` this.openCancelSellNameDialog(nameObj)}>cancel ${translate("registernamepage.nchange20")}` + } + + openCancelSellNameDialog(nameObj) { + this.toCancelSellName = '' + this.shadowRoot.getElementById("toCancelSellName").value = '' + this.toCancelSellName = nameObj.name + this.shadowRoot.querySelector('#cancelSellNameDialog').show() + } + + closeCancelSellNameDialog() { + this.shadowRoot.querySelector('#cancelSellNameDialog').close() + this.toCancelSellName = '' + this.shadowRoot.getElementById("toCancelSellName").value = '' + } + + renderBuyNameButton(nameObj) { + return html` this.openCheck(nameObj)}>shop ${translate("registernamepage.nchange21")}` + } + + openCheck(nameObj) { + const _name = nameObj.name + const _seller = nameObj.owner + const _price = nameObj.salePrice + if (this.isEmptyArray(this.names) === true) { + this.openBuyNameDialog(_name, _seller, _price) + } else { + this.shadowRoot.querySelector('#buyErrorNameDialog').show() + } + } + + openBuyNameDialog(_name, _seller, _price) { + this.toBuyName = '' + this.toBuyPrice = '' + this.toBuySeller = '' + this.shadowRoot.getElementById("toBuyName").value = '' + this.shadowRoot.getElementById("toBuyPrice").value = '' + this.shadowRoot.getElementById("toBuySeller").value = '' + this.toBuyName = _name + this.toBuyPrice = _price + this.toBuySeller = _seller + this.shadowRoot.querySelector('#buyNameDialog').show() + } + + closeBuyNameDialog() { + this.toBuyName = '' + this.toBuyPrice = '' + this.toBuySeller = '' + this.shadowRoot.getElementById("toBuyName").value = '' + this.shadowRoot.getElementById("toBuyPrice").value = '' + this.shadowRoot.getElementById("toBuySeller").value = '' + this.shadowRoot.querySelector('#buyNameDialog').close() + } + + async openCheckFunds() { + await this.updateQortWalletBalance() + + const myFunds = this.round(parseFloat(this.qortWalletBalance)) + const myBuyPrice = this.round(parseFloat(this.toBuyPrice)) + + if (Number(myFunds) < Number(myBuyPrice)) { + this.shadowRoot.querySelector('#buyErrorPriceDialog').show() + } else { + this.createBuyName() + } + } + + closeBuyErrorNameDialog() { + this.shadowRoot.querySelector('#buyErrorNameDialog').close() + } + + closeBuyErrorPriceDialog() { + this.shadowRoot.querySelector('#buyErrorPriceDialog').close() + } + async unitFee() { - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; - const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port; - const url = `${nodeUrl}/transactions/unitfee?txType=REGISTER_NAME`; + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const url = `${nodeUrl}/transactions/unitfee?txType=REGISTER_NAME` await fetch(url).then((response) => { if (response.ok) { - return response.json(); + return response.json() } - return Promise.reject(response); + return Promise.reject(response) }).then((json) => { - this.fee = (Number(json) / 1e8).toFixed(2); + this.fee = (Number(json) / 1e8).toFixed(2) + }) + } + + async unitSellFee() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const url = `${nodeUrl}/transactions/unitfee?txType=SELL_NAME` + await fetch(url).then((response) => { + if (response.ok) { + return response.json() + } + return Promise.reject(response) + }).then((json) => { + this.sellFee = (Number(json) / 1e8).toFixed(8) + }) + } + + async unitCancelSellFee() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const url = `${nodeUrl}/transactions/unitfee?txType=CANCEL_SELL_NAME` + await fetch(url).then((response) => { + if (response.ok) { + return response.json() + } + return Promise.reject(response) + }).then((json) => { + this.cancelSellFee = (Number(json) / 1e8).toFixed(8) + }) + } + + async unitBuyFee() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port + const url = `${nodeUrl}/transactions/unitfee?txType=BUY_NAME` + await fetch(url).then((response) => { + if (response.ok) { + return response.json() + } + return Promise.reject(response) + }).then((json) => { + this.buyFee = (Number(json) / 1e8).toFixed(8) }) } getApiKey() { - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; - let apiKey = myNode.apiKey; - return apiKey; + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + let apiKey = myNode.apiKey + return apiKey } clearSelection() { @@ -391,16 +935,227 @@ class NameRegistration extends LitElement { this.registerNameLoading = false } + async createSellName() { + const name = this.shadowRoot.getElementById("toSellName").value + const price = this.shadowRoot.getElementById("toSellPrice").value + const sellFeeInput = this.sellFee + this.isLoading = true + this.btnDisable = true + + const getLastRef = async () => { + let myRef = await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) + return myRef + } + + const validateReceiver = async () => { + let lastRef = await getLastRef() + let myTransaction = await makeTransactionRequest(lastRef) + getTxnRequestResponse(myTransaction) + } + + const makeTransactionRequest = async (lastRef) => { + const myName = name + const myPrice = price + const myLastRef = lastRef + const myFee = sellFeeInput + const mySellNameDialog1 = get("registernamepage.nchange26") + const mySellNameDialog2 = get("registernamepage.nchange27") + const mySellNameDialog3 = get("registernamepage.nchange28") + + let myTxnrequest = await parentEpml.request('transaction', { + type: 5, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + name: myName, + sellPrice: myPrice, + lastReference: myLastRef, + sellNameDialog1: mySellNameDialog1, + sellNameDialog2: mySellNameDialog2, + sellNameDialog3: mySellNameDialog3 + } + }) + return myTxnrequest + } + + const getTxnRequestResponse = (txnResponse) => { + if (txnResponse.success === false && txnResponse.message) { + this.errorMessage = txnResponse.message + this.isLoading = false + this.btnDisable = false + throw new Error(txnResponse) + } else if (txnResponse.success === true && !txnResponse.data.error) { + this.shadowRoot.getElementById("toSellName").value = '' + this.shadowRoot.getElementById("toSellPrice").value = '' + this.toSellName = '' + this.toSellPrice = '' + this.errorMessage = '' + this.successMessage = this.renderSellSuccessText() + this.isLoading = false + this.btnDisable = false + } else { + this.errorMessage = txnResponse.data.message + this.isLoading = false + this.btnDisable = false + throw new Error(txnResponse) + } + } + validateReceiver() + } + + async createCancelSellName() { + const name = this.shadowRoot.getElementById("toCancelSellName").value + const cancelSellFeeInput = this.cancelSellFee + this.isLoading = true + this.btnDisable = true + + const getLastRef = async () => { + let myRef = await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) + return myRef + } + + const validateReceiver = async () => { + let lastRef = await getLastRef() + let myTransaction = await makeTransactionRequest(lastRef) + getTxnRequestResponse(myTransaction) + } + + const makeTransactionRequest = async (lastRef) => { + const myName = name + const myLastRef = lastRef + const myFee = cancelSellFeeInput + const myCancelSellNameDialog1 = get("registernamepage.nchange30") + const myCancelSellNameDialog2 = get("registernamepage.nchange31") + + let myTxnrequest = await parentEpml.request('transaction', { + type: 6, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + name: myName, + lastReference: myLastRef, + cancelSellNameDialog1: myCancelSellNameDialog1, + cancelSellNameDialog2: myCancelSellNameDialog2 + } + }) + return myTxnrequest + } + + const getTxnRequestResponse = (txnResponse) => { + if (txnResponse.success === false && txnResponse.message) { + this.errorMessage = txnResponse.message + this.isLoading = false + this.btnDisable = false + throw new Error(txnResponse) + } else if (txnResponse.success === true && !txnResponse.data.error) { + this.shadowRoot.getElementById("toCancelSellName").value = '' + this.toCancelSellName = '' + this.errorMessage = '' + this.successMessage = this.renderCancelSuccessText() + this.isLoading = false + this.btnDisable = false + } else { + this.errorMessage = txnResponse.data.message + this.isLoading = false + this.btnDisable = false + throw new Error(txnResponse) + } + } + validateReceiver() + } + + createBuyName() { + const name = this.shadowRoot.getElementById("toBuyName").value + const price = this.shadowRoot.getElementById("toBuyPrice").value + const seller = this.shadowRoot.getElementById("toBuySeller").value + const buyFeeInput = this.buyFee + this.isLoading = true + this.btnDisable = true + + const getLastRef = async () => { + let myRef = await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) + return myRef + } + + const validateReceiver = async () => { + let lastRef = await getLastRef() + let myTransaction = await makeTransactionRequest(lastRef) + getTxnRequestResponse(myTransaction) + } + + const makeTransactionRequest = async (lastRef) => { + const myName = name + const myPrice = price + const mySeller = seller + const myLastRef = lastRef + const myFee = buyFeeInput + const myBuyNameDialog1 = get("registernamepage.nchange39") + const myBuyNameDialog2 = get("registernamepage.nchange27") + const myBuyNameDialog3 = get("registernamepage.nchange40") + + let myTxnrequest = await parentEpml.request('transaction', { + type: 7, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + name: myName, + sellPrice: myPrice, + recipient: mySeller, + lastReference: myLastRef, + buyNameDialog1: myBuyNameDialog1, + buyNameDialog2: myBuyNameDialog2, + buyNameDialog3: myBuyNameDialog3 + } + }) + return myTxnrequest + } + + const getTxnRequestResponse = (txnResponse) => { + if (txnResponse.success === false && txnResponse.message) { + this.errorMessage = txnResponse.message + this.isLoading = false + this.btnDisable = false + throw new Error(txnResponse) + } else if (txnResponse.success === true && !txnResponse.data.error) { + this.shadowRoot.getElementById("toBuyName").value = '' + this.shadowRoot.getElementById("toBuyPrice").value = '' + this.shadowRoot.getElementById("toBuySeller").value = '' + this.toBuyName = '' + this.toBuyPrice = '' + this.toBuySeller = '' + this.errorMessage = '' + this.successMessage = this.renderBuySuccessText() + this.isLoading = false + this.btnDisable = false + } else { + this.errorMessage = txnResponse.data.message + this.isLoading = false + this.btnDisable = false + throw new Error(txnResponse) + } + } + validateReceiver() + } + _textMenu(event) { const getSelectedText = () => { - var text = ""; + var text = "" if (typeof window.getSelection != "undefined") { - text = window.getSelection().toString(); + text = window.getSelection().toString() } else if (typeof this.shadowRoot.selection != "undefined" && this.shadowRoot.selection.type == "Text") { - text = this.shadowRoot.selection.createRange().text; + text = this.shadowRoot.selection.createRange().text } - return text; + return text } const checkSelectedTextAndShowMenu = () => { @@ -414,10 +1169,14 @@ class NameRegistration extends LitElement { parentEpml.request('openCopyTextMenu', textMenuObject) } } - checkSelectedTextAndShowMenu() } + round(number) { + let result = (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) + return result + } + isEmptyArray(arr) { if (!arr) { return true } return arr.length === 0 From 3a115c35e351f8c4585d4acddc81f0306ed1e391 Mon Sep 17 00:00:00 2001 From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com> Date: Mon, 6 Feb 2023 11:16:00 +0100 Subject: [PATCH 09/17] Add missing translation --- qortal-ui-core/language/de.json | 3 ++- qortal-ui-core/language/es.json | 3 ++- qortal-ui-core/language/fr.json | 3 ++- qortal-ui-core/language/hindi.json | 3 ++- qortal-ui-core/language/hr.json | 3 ++- qortal-ui-core/language/hu.json | 3 ++- qortal-ui-core/language/it.json | 3 ++- qortal-ui-core/language/ko.json | 3 ++- qortal-ui-core/language/no.json | 3 ++- qortal-ui-core/language/pl.json | 3 ++- qortal-ui-core/language/pt.json | 3 ++- qortal-ui-core/language/ro.json | 3 ++- qortal-ui-core/language/rs.json | 3 ++- qortal-ui-core/language/ru.json | 3 ++- qortal-ui-core/language/us.json | 3 ++- qortal-ui-core/language/zhc.json | 3 ++- qortal-ui-core/language/zht.json | 3 ++- 17 files changed, 34 insertions(+), 17 deletions(-) diff --git a/qortal-ui-core/language/de.json b/qortal-ui-core/language/de.json index 326683b0..89e22f0a 100644 --- a/qortal-ui-core/language/de.json +++ b/qortal-ui-core/language/de.json @@ -579,7 +579,8 @@ "cchange71": "und", "cchange72": "andere", "cchange73": "s", - "cchange74": "reagiert mit" + "cchange74": "reagiert mit", + "cchange90": "Keine Nachrichten" }, "welcomepage": { "wcchange1": "Willkommen zu Q-Chat", diff --git a/qortal-ui-core/language/es.json b/qortal-ui-core/language/es.json index 82e6dce4..f214975c 100644 --- a/qortal-ui-core/language/es.json +++ b/qortal-ui-core/language/es.json @@ -579,7 +579,8 @@ "cchange71": "y", "cchange72": "otro", "cchange73": "s", - "cchange74": "reaccionó con" + "cchange74": "reaccionó con", + "cchange90": "Sin mensajes" }, "welcomepage": { "wcchange1": "Bienvenido al Q-Chat", diff --git a/qortal-ui-core/language/fr.json b/qortal-ui-core/language/fr.json index 62cd43e1..1c675ae8 100644 --- a/qortal-ui-core/language/fr.json +++ b/qortal-ui-core/language/fr.json @@ -579,7 +579,8 @@ "cchange71": "et", "cchange72": "autre", "cchange73": "s", - "cchange74": "a réagi avec" + "cchange74": "a réagi avec", + "cchange90": "Aucun message" }, "welcomepage": { "wcchange1": "Bienvenue dans Q-Chat", diff --git a/qortal-ui-core/language/hindi.json b/qortal-ui-core/language/hindi.json index 2ef18b37..fcc46ed9 100644 --- a/qortal-ui-core/language/hindi.json +++ b/qortal-ui-core/language/hindi.json @@ -580,7 +580,8 @@ "cchange71": "और", "cchange72": "अन्य", "cchange73": "s", - "cchange74": "के साथ प्रतिक्रिया" + "cchange74": "के साथ प्रतिक्रिया", + "cchange90": "कोई संदेश नहीं" }, "welcomepage": { "wcchange1": "क्यू-चैट में आपका स्वागत है", diff --git a/qortal-ui-core/language/hr.json b/qortal-ui-core/language/hr.json index 26fc0d4a..287904ce 100644 --- a/qortal-ui-core/language/hr.json +++ b/qortal-ui-core/language/hr.json @@ -579,7 +579,8 @@ "cchange71": "i", "cchange72": "ostalo", "cchange73": "s", - "cchange74": "reagirao sa" + "cchange74": "reagirao sa", + "cchange90": "Nema poruka" }, "welcomepage": { "wcchange1": "Dobrodošli u Q-Čavrljanje", diff --git a/qortal-ui-core/language/hu.json b/qortal-ui-core/language/hu.json index d92390cf..0ddb80d5 100644 --- a/qortal-ui-core/language/hu.json +++ b/qortal-ui-core/language/hu.json @@ -579,7 +579,8 @@ "cchange71": "és", "cchange72": "egyéb", "cchange73": "s", - "cchange74": "reagált:" + "cchange74": "reagált:", + "cchange90": "Nincs üzenet" }, "welcomepage": { "wcchange1": "Üdvözöljük a Q-Chathoz", diff --git a/qortal-ui-core/language/it.json b/qortal-ui-core/language/it.json index 1523e212..bae18193 100644 --- a/qortal-ui-core/language/it.json +++ b/qortal-ui-core/language/it.json @@ -579,7 +579,8 @@ "cchange71": "e", "cchange72": "altro", "cchange73": "s", - "cchange74": "ha reagito con" + "cchange74": "ha reagito con", + "cchange90": "Nessun messaggio" }, "welcomepage": { "wcchange1": "Benvenuto in Q-Chat", diff --git a/qortal-ui-core/language/ko.json b/qortal-ui-core/language/ko.json index 5e533527..e07e921e 100644 --- a/qortal-ui-core/language/ko.json +++ b/qortal-ui-core/language/ko.json @@ -579,7 +579,8 @@ "cchange71": "그리고", "cchange72": "기타", "cchange73": "들", - "cchange74": "반응" + "cchange74": "반응", + "cchange90": "메시지 없음" }, "welcomepage": { "wcchange1": "Q-Chat에 오신 것을 환영합니다.", diff --git a/qortal-ui-core/language/no.json b/qortal-ui-core/language/no.json index 1ee638af..f32175ed 100644 --- a/qortal-ui-core/language/no.json +++ b/qortal-ui-core/language/no.json @@ -579,7 +579,8 @@ "cchange71": "og", "cchange72": "annet", "cchange73": "s", - "cchange74": "reagerte med" + "cchange74": "reagerte med", + "cchange90": "Ingen meldinger" }, "welcomepage": { "wcchange1": "Velkommen til Q-Chat", diff --git a/qortal-ui-core/language/pl.json b/qortal-ui-core/language/pl.json index 5c75270f..ee1d4b14 100644 --- a/qortal-ui-core/language/pl.json +++ b/qortal-ui-core/language/pl.json @@ -579,7 +579,8 @@ "cchange71": "i", "cchange72": "inne", "cchange73": "s", - "cchange74": "zareagował z" + "cchange74": "zareagował z", + "cchange90": "Brak wiadomości" }, "welcomepage": { "wcchange1": "Witamy w Q-Chat", diff --git a/qortal-ui-core/language/pt.json b/qortal-ui-core/language/pt.json index 870b3dd3..6558c1f4 100644 --- a/qortal-ui-core/language/pt.json +++ b/qortal-ui-core/language/pt.json @@ -579,7 +579,8 @@ "cchange71": "e", "cchange72": "outro", "cchange73": "s", - "cchange74": "reagiu com" + "cchange74": "reagiu com", + "cchange90": "Sem mensagens" }, "welcomepage": { "wcchange1": "Bem-vindo ao Q-Chat", diff --git a/qortal-ui-core/language/ro.json b/qortal-ui-core/language/ro.json index 4e17e959..e5908fb5 100644 --- a/qortal-ui-core/language/ro.json +++ b/qortal-ui-core/language/ro.json @@ -579,7 +579,8 @@ "cchange71": "și", "cchange72": "altul", "cchange73": "s", - "cchange74": "a reacționat cu" + "cchange74": "a reacționat cu", + "cchange90": "Fără mesaje" }, "welcomepage": { "wcchange1": "Bine ai venit la Q-Chat", diff --git a/qortal-ui-core/language/rs.json b/qortal-ui-core/language/rs.json index e1722ca2..1873c837 100644 --- a/qortal-ui-core/language/rs.json +++ b/qortal-ui-core/language/rs.json @@ -579,7 +579,8 @@ "cchange71": "i", "cchange72": "drugo", "cchange73": "s", - "cchange74": "reagovao sa" + "cchange74": "reagovao sa", + "cchange90": "Nema poruka" }, "welcomepage": { "wcchange1": "Dobrodošli na Q-Chat", diff --git a/qortal-ui-core/language/ru.json b/qortal-ui-core/language/ru.json index ea20a79d..a27dce40 100644 --- a/qortal-ui-core/language/ru.json +++ b/qortal-ui-core/language/ru.json @@ -579,7 +579,8 @@ "cchange71": "и", "cchange72": "другое", "cchange73": "с", - "cchange74": "отреагировал" + "cchange74": "отреагировал", + "cchange90": "Нет сообщений" }, "welcomepage": { "wcchange1": "Добро пожаловать в Q-Chat", diff --git a/qortal-ui-core/language/us.json b/qortal-ui-core/language/us.json index 87760fd7..02bb9586 100644 --- a/qortal-ui-core/language/us.json +++ b/qortal-ui-core/language/us.json @@ -579,7 +579,8 @@ "cchange71": "and", "cchange72": "other", "cchange73": "s", - "cchange74": "reacted with" + "cchange74": "reacted with", + "cchange90": "No messages" }, "welcomepage": { "wcchange1": "Welcome to Q-Chat", diff --git a/qortal-ui-core/language/zhc.json b/qortal-ui-core/language/zhc.json index 57fe5ec0..ee0c77b5 100644 --- a/qortal-ui-core/language/zhc.json +++ b/qortal-ui-core/language/zhc.json @@ -579,7 +579,8 @@ "cchange71": "和", "cchange72": "其他", "cchange73": "的", - "cchange74": "心情回应" + "cchange74": "心情回应", + "cchange90": "没有消息" }, "welcomepage": { "wcchange1": "欢迎来到Q-Chat", diff --git a/qortal-ui-core/language/zht.json b/qortal-ui-core/language/zht.json index 457d0bc4..1842d4d9 100644 --- a/qortal-ui-core/language/zht.json +++ b/qortal-ui-core/language/zht.json @@ -579,7 +579,8 @@ "cchange71": "和", "cchange72": "其他", "cchange73": "的", - "cchange74": "心情回應" + "cchange74": "心情回應", + "cchange90": "沒有消息" }, "welcomepage": { "wcchange1": "歡迎來到 Q-Chat", From 8bf10588b95c33ce9dec637650a074613c898c5b Mon Sep 17 00:00:00 2001 From: Phillip Date: Mon, 6 Feb 2023 12:19:08 +0200 Subject: [PATCH 10/17] fix unread error in general chat --- .../plugins/core/components/ChatPage.js | 16 ++++++++++++++-- .../plugins/core/messaging/q-chat/q-chat.src.js | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/qortal-ui-plugins/plugins/core/components/ChatPage.js b/qortal-ui-plugins/plugins/core/components/ChatPage.js index 8aacdc1b..bb6023b1 100644 --- a/qortal-ui-plugins/plugins/core/components/ChatPage.js +++ b/qortal-ui-plugins/plugins/core/components/ChatPage.js @@ -1421,6 +1421,12 @@ class ChatPage extends LitElement { }) document.addEventListener('keydown', this.initialChat); document.addEventListener('paste', this.pasteImage); + if(this.chatId){ + window.parent.reduxStore.dispatch( window.parent.reduxAction.addChatLastSeen({ + key: this.chatId, + timestamp: Date.now() + })) + } } disconnectedCallback() { @@ -1444,7 +1450,7 @@ class ChatPage extends LitElement { document.removeEventListener('keydown', this.initialChat); document.removeEventListener('paste', this.pasteImage); - if(this.messagesRendered.length !== 0){ + if(this.chatId){ window.parent.reduxStore.dispatch( window.parent.reduxAction.addChatLastSeen({ key: this.chatId, timestamp: Date.now() @@ -2181,7 +2187,13 @@ class ChatPage extends LitElement { await this.renderNewMessage(msg) }) await Promise.all(renderEachMessage) - + if(this.chatId){ + window.parent.reduxStore.dispatch( window.parent.reduxAction.addChatLastSeen({ + key: this.chatId, + timestamp: Date.now() + })) + + } // this.newMessages = this.newMessages.concat(_newMessages) this.messagesRendered = [...this.messagesRendered].sort(function (a, b) { return a.timestamp diff --git a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js index e618a1b0..3ed87067 100644 --- a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js +++ b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js @@ -887,7 +887,7 @@ class Chat extends LitElement { setChatHeads(chatObj) { const chatObjGroups = Array.isArray(chatObj.groups) ? chatObj.groups : []; const chatObjDirect = Array.isArray(chatObj.direct) ? chatObj.direct : []; - let groupList = chatObjGroups.map(group => group.groupId === 0 ? { groupId: group.groupId, url: `group/${group.groupId}`, groupName: "Qortal General Chat", timestamp: group.timestamp === undefined ? 2 : group.timestamp } : { ...group, timestamp: group.timestamp === undefined ? 1 : group.timestamp, url: `group/${group.groupId}` }) + let groupList = chatObjGroups.map(group => group.groupId === 0 ? { groupId: group.groupId, url: `group/${group.groupId}`, groupName: "Qortal General Chat", timestamp: group.timestamp === undefined ? 2 : group.timestamp, sender: group.sender } : { ...group, timestamp: group.timestamp === undefined ? 1 : group.timestamp, url: `group/${group.groupId}` }) let directList = chatObjDirect.map(dc => { return { ...dc, url: `direct/${dc.address}` } }) From ce6a7873665e32581ca89a227fc942bdd3fbe317 Mon Sep 17 00:00:00 2001 From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com> Date: Mon, 6 Feb 2023 11:27:04 +0100 Subject: [PATCH 11/17] Update dependencies --- package.json | 2 +- qortal-ui-core/package.json | 24 ++++++++++++------------ qortal-ui-plugins/package.json | 29 +++++++++++++++-------------- 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index e868253e..256ce0c4 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "os-locale": "3.0.0" }, "devDependencies": { - "electron": "22.0.3", + "electron": "22.2.0", "electron-builder": "23.6.0", "electron-packager": "17.1.1", "shelljs": "0.8.5" diff --git a/qortal-ui-core/package.json b/qortal-ui-core/package.json index 8e4f2ad3..d8361eda 100644 --- a/qortal-ui-core/package.json +++ b/qortal-ui-core/package.json @@ -17,9 +17,9 @@ "author": "QORTAL ", "license": "GPL-3.0", "dependencies": { - "@hapi/hapi": "21.2.0", + "@hapi/hapi": "21.2.1", "@hapi/inert": "7.0.0", - "sass": "1.57.1" + "sass": "1.58.0" }, "devDependencies": { "@babel/core": "7.20.12", @@ -58,27 +58,27 @@ "@rollup/plugin-commonjs": "24.0.1", "@rollup/plugin-node-resolve": "15.0.1", "@rollup/plugin-replace": "5.0.2", - "@rollup/plugin-terser": "0.3.0", - "@vaadin/button": "23.3.5", - "@vaadin/grid": "23.3.5", - "@vaadin/icons": "23.3.5", - "@vaadin/password-field": "23.3.5", - "@vaadin/tooltip": "23.3.5", + "@rollup/plugin-terser": "0.4.0", + "@vaadin/button": "23.3.6", + "@vaadin/grid": "23.3.6", + "@vaadin/icons": "23.3.6", + "@vaadin/password-field": "23.3.6", + "@vaadin/tooltip": "23.3.6", "asmcrypto.js": "2.3.2", "bcryptjs": "2.4.3", "epml": "0.3.3", "file-saver": "2.0.5", "lit": "2.6.1", "lit-translate": "2.0.1", + "localforage": "1.10.0", "pwa-helpers": "0.9.1", - "redux": "4.2.0", + "redux": "4.2.1", "redux-thunk": "2.4.2", - "rollup": "3.10.1", + "rollup": "3.14.0", "rollup-plugin-node-globals": "1.4.0", "rollup-plugin-progress": "1.1.2", "rollup-plugin-scss": "3.0.0", - "rollup-plugin-web-worker-loader": "1.6.1", - "localforage": "1.10.0" + "rollup-plugin-web-worker-loader": "1.6.1" }, "engines": { "node": ">=16.17.1" diff --git a/qortal-ui-plugins/package.json b/qortal-ui-plugins/package.json index 7ab1011d..261ca4d0 100644 --- a/qortal-ui-plugins/package.json +++ b/qortal-ui-plugins/package.json @@ -20,13 +20,14 @@ "@lit-labs/motion": "1.0.3", "@material/mwc-list": "0.27.0", "@material/mwc-select": "0.27.0", - "@tiptap/core": "2.0.0-beta.209", - "@tiptap/extension-highlight": "2.0.0-beta.209", - "@tiptap/extension-image": "2.0.0-beta.209", - "@tiptap/extension-placeholder": "2.0.0-beta.209", - "@tiptap/extension-underline": "2.0.0-beta.209", - "@tiptap/html": "2.0.0-beta.209", - "@tiptap/starter-kit": "2.0.0-beta.209", + "@tiptap/pm": "2.0.0-beta.212", + "@tiptap/core": "2.0.0-beta.212", + "@tiptap/extension-highlight": "2.0.0-beta.212", + "@tiptap/extension-image": "2.0.0-beta.212", + "@tiptap/extension-placeholder": "2.0.0-beta.212", + "@tiptap/extension-underline": "2.0.0-beta.212", + "@tiptap/html": "2.0.0-beta.212", + "@tiptap/starter-kit": "2.0.0-beta.212", "asmcrypto.js": "2.3.2", "compressorjs": "1.1.1", "emoji-picker-js": "https://github.com/Qortal/emoji-picker-js", @@ -69,19 +70,19 @@ "@rollup/plugin-commonjs": "24.0.1", "@rollup/plugin-node-resolve": "15.0.1", "@rollup/plugin-replace": "5.0.2", - "@rollup/plugin-terser": "0.3.0", - "@vaadin/avatar": "23.3.5", - "@vaadin/button": "23.3.5", - "@vaadin/grid": "23.3.5", - "@vaadin/icons": "23.3.5", - "@vaadin/tooltip": "23.3.5", + "@rollup/plugin-terser": "0.4.0", + "@vaadin/avatar": "23.3.6", + "@vaadin/button": "23.3.6", + "@vaadin/grid": "23.3.6", + "@vaadin/icons": "23.3.6", + "@vaadin/tooltip": "23.3.6", "epml": "0.3.3", "file-saver": "2.0.5", "highcharts": "10.3.3", "html-escaper": "3.0.3", "lit": "2.6.1", "lit-translate": "2.0.1", - "rollup": "3.10.1", + "rollup": "3.14.0", "rollup-plugin-node-globals": "1.4.0", "rollup-plugin-progress": "1.1.2", "rollup-plugin-web-worker-loader": "1.6.1", From c24b045cbf7ba84e95a8b8507e846c095cb32e6d Mon Sep 17 00:00:00 2001 From: Phillip Date: Thu, 9 Feb 2023 18:50:22 +0200 Subject: [PATCH 12/17] increase maxWidth image --- qortal-ui-plugins/plugins/core/components/ChatPage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qortal-ui-plugins/plugins/core/components/ChatPage.js b/qortal-ui-plugins/plugins/core/components/ChatPage.js index bb6023b1..dee7be54 100644 --- a/qortal-ui-plugins/plugins/core/components/ChatPage.js +++ b/qortal-ui-plugins/plugins/core/components/ChatPage.js @@ -2697,7 +2697,7 @@ class ChatPage extends LitElement { await new Promise(resolve => { new Compressor( image, { quality: .6, - maxWidth: 500, + maxWidth: 1200, success(result){ const file = new File([result], "name", { type: image.type From 1dbea9441aa81aee9325e4af852fcbdef1f4a82d Mon Sep 17 00:00:00 2001 From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com> Date: Thu, 9 Feb 2023 19:52:18 +0100 Subject: [PATCH 13/17] Update Vaadin --- qortal-ui-core/package.json | 10 +++++----- qortal-ui-plugins/package.json | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/qortal-ui-core/package.json b/qortal-ui-core/package.json index d8361eda..16b78477 100644 --- a/qortal-ui-core/package.json +++ b/qortal-ui-core/package.json @@ -59,11 +59,11 @@ "@rollup/plugin-node-resolve": "15.0.1", "@rollup/plugin-replace": "5.0.2", "@rollup/plugin-terser": "0.4.0", - "@vaadin/button": "23.3.6", - "@vaadin/grid": "23.3.6", - "@vaadin/icons": "23.3.6", - "@vaadin/password-field": "23.3.6", - "@vaadin/tooltip": "23.3.6", + "@vaadin/button": "23.3.7", + "@vaadin/grid": "23.3.7", + "@vaadin/icons": "23.3.7", + "@vaadin/password-field": "23.3.7", + "@vaadin/tooltip": "23.3.7", "asmcrypto.js": "2.3.2", "bcryptjs": "2.4.3", "epml": "0.3.3", diff --git a/qortal-ui-plugins/package.json b/qortal-ui-plugins/package.json index 261ca4d0..19a1297e 100644 --- a/qortal-ui-plugins/package.json +++ b/qortal-ui-plugins/package.json @@ -71,11 +71,11 @@ "@rollup/plugin-node-resolve": "15.0.1", "@rollup/plugin-replace": "5.0.2", "@rollup/plugin-terser": "0.4.0", - "@vaadin/avatar": "23.3.6", - "@vaadin/button": "23.3.6", - "@vaadin/grid": "23.3.6", - "@vaadin/icons": "23.3.6", - "@vaadin/tooltip": "23.3.6", + "@vaadin/avatar": "23.3.7", + "@vaadin/button": "23.3.7", + "@vaadin/grid": "23.3.7", + "@vaadin/icons": "23.3.7", + "@vaadin/tooltip": "23.3.7", "epml": "0.3.3", "file-saver": "2.0.5", "highcharts": "10.3.3", From 40c622aa2153fd1be36460462752e26db4cab66b Mon Sep 17 00:00:00 2001 From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com> Date: Sat, 11 Feb 2023 17:24:21 +0100 Subject: [PATCH 14/17] Update deps --- package.json | 2 +- qortal-ui-core/package.json | 2 +- qortal-ui-plugins/package.json | 31 ++++++++++++++++--------------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index 256ce0c4..4e1dcc40 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "os-locale": "3.0.0" }, "devDependencies": { - "electron": "22.2.0", + "electron": "22.2.1", "electron-builder": "23.6.0", "electron-packager": "17.1.1", "shelljs": "0.8.5" diff --git a/qortal-ui-core/package.json b/qortal-ui-core/package.json index 16b78477..bccf855a 100644 --- a/qortal-ui-core/package.json +++ b/qortal-ui-core/package.json @@ -74,7 +74,7 @@ "pwa-helpers": "0.9.1", "redux": "4.2.1", "redux-thunk": "2.4.2", - "rollup": "3.14.0", + "rollup": "3.15.0", "rollup-plugin-node-globals": "1.4.0", "rollup-plugin-progress": "1.1.2", "rollup-plugin-scss": "3.0.0", diff --git a/qortal-ui-plugins/package.json b/qortal-ui-plugins/package.json index 19a1297e..3c6a3f94 100644 --- a/qortal-ui-plugins/package.json +++ b/qortal-ui-plugins/package.json @@ -20,28 +20,28 @@ "@lit-labs/motion": "1.0.3", "@material/mwc-list": "0.27.0", "@material/mwc-select": "0.27.0", - "@tiptap/pm": "2.0.0-beta.212", - "@tiptap/core": "2.0.0-beta.212", - "@tiptap/extension-highlight": "2.0.0-beta.212", - "@tiptap/extension-image": "2.0.0-beta.212", - "@tiptap/extension-placeholder": "2.0.0-beta.212", - "@tiptap/extension-underline": "2.0.0-beta.212", - "@tiptap/html": "2.0.0-beta.212", - "@tiptap/starter-kit": "2.0.0-beta.212", + "@tiptap/pm": "2.0.0-beta.217", + "@tiptap/core": "2.0.0-beta.217", + "@tiptap/extension-highlight": "2.0.0-beta.217", + "@tiptap/extension-image": "2.0.0-beta.217", + "@tiptap/extension-placeholder": "2.0.0-beta.217", + "@tiptap/extension-underline": "2.0.0-beta.217", + "@tiptap/html": "2.0.0-beta.217", + "@tiptap/starter-kit": "2.0.0-beta.217", "asmcrypto.js": "2.3.2", "compressorjs": "1.1.1", "emoji-picker-js": "https://github.com/Qortal/emoji-picker-js", "localforage": "1.10.0", "prosemirror-commands": "1.5.0", - "prosemirror-dropcursor": "1.6.1", + "prosemirror-dropcursor": "1.7.0", "prosemirror-gapcursor": "1.3.1", "prosemirror-history": "1.3.0", "prosemirror-keymap": "1.2.0", - "prosemirror-model": "1.18.3", + "prosemirror-model": "1.19.0", "prosemirror-schema-list": "1.2.2", "prosemirror-state": "1.4.2", - "prosemirror-transform": "1.7.0", - "prosemirror-view": "1.29.1", + "prosemirror-transform": "1.7.1", + "prosemirror-view": "1.30.1", "short-unique-id": "4.4.4" }, "devDependencies": { @@ -82,11 +82,12 @@ "html-escaper": "3.0.3", "lit": "2.6.1", "lit-translate": "2.0.1", - "rollup": "3.14.0", + "passive-events-support": "1.0.33", + "rollup": "3.15.0", "rollup-plugin-node-globals": "1.4.0", "rollup-plugin-progress": "1.1.2", - "rollup-plugin-web-worker-loader": "1.6.1", - "passive-events-support": "1.0.33" + "rollup-plugin-web-worker-loader": "1.6.1" + }, "engines": { "node": ">=16.17.1" From ac935e8871546671502235723da9630c90f5e01f Mon Sep 17 00:00:00 2001 From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com> Date: Sat, 11 Feb 2023 17:27:21 +0100 Subject: [PATCH 15/17] Bump version v3.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4e1dcc40..f39b57db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "qortal-ui", - "version": "3.0.1", + "version": "3.1.0", "description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet", "keywords": [ "QORT", From 73b5c675047ed0ac00f825e8e26c1da52c1b917d Mon Sep 17 00:00:00 2001 From: QuickMythril Date: Sat, 11 Feb 2023 14:43:05 -0500 Subject: [PATCH 16/17] Add unused foreign address button --- .../plugins/core/wallet/wallet-app.src.js | 216 +++++++++++++++++- 1 file changed, 207 insertions(+), 9 deletions(-) diff --git a/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js b/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js index 5f1228c7..6064cc83 100644 --- a/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js +++ b/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js @@ -62,6 +62,7 @@ class MultiWallet extends LitElement { arrrMemo: { type: String }, errorMessage: { type: String }, arrrWalletAddress: { type: String }, + unusedWalletAddress: { type: String }, successMessage: { type: String }, sendMoneyLoading: { type: Boolean }, btnDisable: { type: Boolean }, @@ -357,8 +358,8 @@ class MultiWallet extends LitElement { .wallet-address { display: flex; align-items: center; - font-size: 18px; - color: var(--black); + font-size: 18px; + color: var(--black); margin: 4px 0 20px; } @@ -366,7 +367,7 @@ class MultiWallet extends LitElement { display: inline-block; font-weight: 600; font-size: 32px; - color: var(--black); + color: var(--black); } #transactions { @@ -505,6 +506,13 @@ class MultiWallet extends LitElement { position: relative; } + .unused-address-dialog { + min-height: 300px; + min-width: 300px; + box-sizing: border-box; + position: relative; + } + .btn-clear-success { --mdc-icon-button-size: 32px; color: red; @@ -561,6 +569,12 @@ class MultiWallet extends LitElement { width: 185px; } + .unused-pos { + margin-top: -44px; + margin-left: 410px; + width: 250px; + } + @media (max-width: 863px) { .wallet { width: 100%; @@ -673,6 +687,7 @@ class MultiWallet extends LitElement { this.arrrRecipient = '' this.arrrMemo = '' this.arrrWalletAddress = '' + this.unusedWalletAddress = '' this.errorMessage = '' this.successMessage = '' this.myElementId = '' @@ -799,7 +814,7 @@ class MultiWallet extends LitElement { ${translate("walletpage.wchange2")}
    ${this.getSelectedWalletAddress()} - ${this.renderAddressbookButton()}
    +
    + ${this.renderUnusedAddressButton()} +
    @@ -1968,6 +1986,106 @@ class MultiWallet extends LitElement { + +
    +
    + +

    Unused BTC Address

    +
    +
    +

    + ${this.wallets.get(this._selectedWallet).unusedWalletAddress} +

    +
    + + ${translate("general.close")} + +
    + + +
    +
    + +

    Unused LTC Address

    +
    +
    +

    + ${this.wallets.get(this._selectedWallet).unusedWalletAddress} +

    +
    + + ${translate("general.close")} + +
    + + +
    +
    + +

    Unused DOGE Address

    +
    +
    +

    + ${this.wallets.get(this._selectedWallet).unusedWalletAddress} +

    +
    + + ${translate("general.close")} + +
    + + +
    +
    + +

    Unused DGB Address

    +
    +
    +

    + ${this.wallets.get(this._selectedWallet).unusedWalletAddress} +

    +
    + + ${translate("general.close")} + +
    + + +
    +
    + +

    Unused RVN Address

    +
    +
    +

    + ${this.wallets.get(this._selectedWallet).unusedWalletAddress} +

    +
    + + ${translate("general.close")} + +
    +
    @@ -3846,7 +3964,7 @@ class MultiWallet extends LitElement { renderCAB() { return html` ${this.selectedTransaction.aTAddress} - { try { - + const getNames = await parentEpml.request("apiCall", { type: "api", url: `/names/address/${recipient}`, @@ -4501,10 +4619,10 @@ class MultiWallet extends LitElement { this.balance = this.wallets.get(this._selectedWallet).balance } } - }) + }) const txsQort = await parentEpml.request('apiCall', { url: `/transactions/search?address=${this.wallets.get('qort').wallet.address}&confirmationStatus=CONFIRMED&reverse=true&txType=PAYMENT&txType=REGISTER_NAME&txType=UPDATE_NAME&txType=SELL_NAME&txType=CANCEL_SELL_NAME&txType=BUY_NAME&txType=CREATE_POLL&txType=VOTE_ON_POLL&txType=ISSUE_ASSET&txType=TRANSFER_ASSET&txType=CREATE_ASSET_ORDER&txType=CANCEL_ASSET_ORDER&txType=MULTI_PAYMENT&txType=DEPLOY_AT&txType=MESSAGE&txType=PUBLICIZE&txType=AIRDROP&txType=AT&txType=CREATE_GROUP&txType=UPDATE_GROUP&txType=ADD_GROUP_ADMIN&txType=REMOVE_GROUP_ADMIN&txType=GROUP_BAN&txType=CANCEL_GROUP_BAN&txType=GROUP_KICK&txType=GROUP_INVITE&txType=CANCEL_GROUP_INVITE&txType=JOIN_GROUP&txType=LEAVE_GROUP&txType=GROUP_APPROVAL&txType=SET_GROUP&txType=UPDATE_ASSET&txType=ACCOUNT_FLAGS&txType=ENABLE_FORGING&txType=REWARD_SHARE&txType=ACCOUNT_LEVEL&txType=TRANSFER_PRIVS&txType=PRESENCE`, - }) + }) const pendingTxsQort = await parentEpml.request('apiCall', { url: `/transactions/unconfirmed?creator=${this.wallets.get('qort').wallet.base58PublicKey}&reverse=true&txType=PAYMENT&txType=REGISTER_NAME&txType=UPDATE_NAME&txType=SELL_NAME&txType=CANCEL_SELL_NAME&txType=BUY_NAME&txType=CREATE_POLL&txType=VOTE_ON_POLL&txType=ISSUE_ASSET&txType=TRANSFER_ASSET&txType=CREATE_ASSET_ORDER&txType=CANCEL_ASSET_ORDER&txType=MULTI_PAYMENT&txType=DEPLOY_AT&txType=MESSAGE&txType=PUBLICIZE&txType=AIRDROP&txType=AT&txType=CREATE_GROUP&txType=UPDATE_GROUP&txType=ADD_GROUP_ADMIN&txType=REMOVE_GROUP_ADMIN&txType=GROUP_BAN&txType=CANCEL_GROUP_BAN&txType=GROUP_KICK&txType=GROUP_INVITE&txType=CANCEL_GROUP_INVITE&txType=JOIN_GROUP&txType=LEAVE_GROUP&txType=GROUP_APPROVAL&txType=SET_GROUP&txType=UPDATE_ASSET&txType=ACCOUNT_FLAGS&txType=ENABLE_FORGING&txType=REWARD_SHARE&txType=ACCOUNT_LEVEL&txType=TRANSFER_PRIVS&txType=PRESENCE`, }) @@ -4638,6 +4756,70 @@ class MultiWallet extends LitElement { } } + async getUnusedAddress(coin) { + this.wallets.get(this._selectedWallet).unusedWalletAddress = 'Loading...' + let _url = `` + let _body = null + + switch (coin) { + case 'qort': + case 'arrr': + _url = `` + _body = null + break + case 'btc': + case 'ltc': + case 'doge': + case 'dgb': + case 'rvn': + const walletName = `${coin}Wallet` + _url = `/crosschain/${coin}/unusedaddress?apiKey=${this.getApiKey()}` + _body = `${window.parent.reduxStore.getState().app.selectedAddress[walletName].derivedMasterPublicKey}` + break + default: + break + } + + if (_body === null) { + this.unusedAddressString = "" + } else { + await parentEpml.request('apiCall', { + url: _url, + method: 'POST', + body: _body, + }).then((res) => { + this.wallets.get(this._selectedWallet).unusedWalletAddress = res + this.unusedAddressString = this.wallets.get(this._selectedWallet).unusedWalletAddress + this.openUnusedAddressDialog(coin) + }) + } + } + + openUnusedAddressDialog(coin) { + switch (coin) { + case 'qort': + case 'arrr': + break + case 'btc': + this.shadowRoot.querySelector("#btcUnusedAddressDialog").show(); + break + case 'ltc': + this.shadowRoot.querySelector("#ltcUnusedAddressDialog").show(); + break + case 'doge': + this.shadowRoot.querySelector("#dogeUnusedAddressDialog").show(); + break + case 'dgb': + this.shadowRoot.querySelector("#dgbUnusedAddressDialog").show(); + break + case 'rvn': + this.shadowRoot.querySelector("#rvnUnusedAddressDialog").show(); + break + default: + break + } + } + renderSendButton() { if ( this._selectedWallet === "qort" ) { return html` this.openSendQort()}> ${translate("walletpage.wchange17")} QORT` @@ -4678,6 +4860,22 @@ class MultiWallet extends LitElement { } } + renderUnusedAddressButton() { + switch (this._selectedWallet) { + case "qort": + case "arrr": + return html` this.getUnusedAddress(this._selectedWallet)}>Get Unused Address` + case "btc": + case "ltc": + case "doge": + case "dgb": + case "rvn": + return html` this.getUnusedAddress(this._selectedWallet)}>Get Unused Address` + default: + return html`` + } + } + renderExportAddressbookButton() { if ( this._selectedWallet === "qort" ) { return html` this.exportQortAddressbook()}> ${translate("walletpage.wchange54")}` @@ -5556,4 +5754,4 @@ class MultiWallet extends LitElement { } } -window.customElements.define('multi-wallet', MultiWallet) \ No newline at end of file +window.customElements.define('multi-wallet', MultiWallet) From 310291a0747aaeac77dee62c266d137bbfbd2b3c Mon Sep 17 00:00:00 2001 From: QuickMythril Date: Sat, 11 Feb 2023 18:20:10 -0500 Subject: [PATCH 17/17] Languages and copy support for New Address button --- qortal-ui-core/language/de.json | 3 +- qortal-ui-core/language/es.json | 3 +- qortal-ui-core/language/fr.json | 3 +- qortal-ui-core/language/hindi.json | 3 +- qortal-ui-core/language/hr.json | 3 +- qortal-ui-core/language/hu.json | 3 +- qortal-ui-core/language/it.json | 3 +- qortal-ui-core/language/ko.json | 3 +- qortal-ui-core/language/no.json | 3 +- qortal-ui-core/language/pl.json | 3 +- qortal-ui-core/language/pt.json | 3 +- qortal-ui-core/language/ro.json | 3 +- qortal-ui-core/language/rs.json | 3 +- qortal-ui-core/language/ru.json | 3 +- qortal-ui-core/language/us.json | 3 +- qortal-ui-core/language/zhc.json | 3 +- qortal-ui-core/language/zht.json | 3 +- .../plugins/core/wallet/wallet-app.src.js | 87 ++++++++++++++++--- 18 files changed, 110 insertions(+), 28 deletions(-) diff --git a/qortal-ui-core/language/de.json b/qortal-ui-core/language/de.json index 89e22f0a..c0421968 100644 --- a/qortal-ui-core/language/de.json +++ b/qortal-ui-core/language/de.json @@ -283,7 +283,8 @@ "wchange54": "Adressbuch exportieren", "wchange55": "Ihr bestehendes Adressbuch wird gelöscht und aus einem Backup neu erstellt.", "wchange56": "WARNUNG!", - "wchange57": "Memo" + "wchange57": "Memo", + "wchange58": "Neue Adresse" }, "tradepage": { "tchange1": "Handelsportal", diff --git a/qortal-ui-core/language/es.json b/qortal-ui-core/language/es.json index f214975c..8cc4177f 100644 --- a/qortal-ui-core/language/es.json +++ b/qortal-ui-core/language/es.json @@ -283,7 +283,8 @@ "wchange54": "Exportar libreta de direcciones", "wchange55": "Su libreta de direcciones existente se eliminará y se creará una nueva copia de seguridad.", "wchange56": "ADVERTENCIA!", - "wchange57": "Memorándum" + "wchange57": "Memorándum", + "wchange58": "Nueva Dirección" }, "tradepage": { "tchange1": "Portal de Comercio", diff --git a/qortal-ui-core/language/fr.json b/qortal-ui-core/language/fr.json index 1c675ae8..6a774c6f 100644 --- a/qortal-ui-core/language/fr.json +++ b/qortal-ui-core/language/fr.json @@ -283,7 +283,8 @@ "wchange54": "Exporter le carnet d'adresses", "wchange55": "Votre carnet d'adresses existant sera supprimé et une nouvelle sauvegarde sera créée.", "wchange56": "ATTENTION!", - "wchange57": "Mémo" + "wchange57": "Mémo", + "wchange58": "Nouvelle Adresse" }, "tradepage": { "tchange1": "Portail de commerce", diff --git a/qortal-ui-core/language/hindi.json b/qortal-ui-core/language/hindi.json index fcc46ed9..ee85ecb9 100644 --- a/qortal-ui-core/language/hindi.json +++ b/qortal-ui-core/language/hindi.json @@ -284,7 +284,8 @@ "wchange54": "निर्यात पता पुस्तिका", "wchange55": "आपकी मौजूदा पता पुस्तिका हटा दी जाएगी और बैकअप से नया बनाया जाएगा।", "wchange56": "चेतावनी!", - "wchange57": "ज्ञापन" + "wchange57": "ज्ञापन", + "wchange58": "नया पता" }, "tradepage": { "tchange1": "व्यापार पोर्टल", diff --git a/qortal-ui-core/language/hr.json b/qortal-ui-core/language/hr.json index 287904ce..be605ccd 100644 --- a/qortal-ui-core/language/hr.json +++ b/qortal-ui-core/language/hr.json @@ -283,7 +283,8 @@ "wchange54": "Izvezi adresar", "wchange55": "Vaš postojeći adresar bit će izbrisan i novi će se stvoriti iz sigurnosne kopije.", "wchange56": "UPOZORENJE!", - "wchange57": "Dopis" + "wchange57": "Dopis", + "wchange58": "Nova Adresa" }, "tradepage": { "tchange1": "Portal razmjene", diff --git a/qortal-ui-core/language/hu.json b/qortal-ui-core/language/hu.json index 0ddb80d5..84898ba0 100644 --- a/qortal-ui-core/language/hu.json +++ b/qortal-ui-core/language/hu.json @@ -283,7 +283,8 @@ "wchange54": "Címjegyzék exportálása", "wchange55": "Meglévő címjegyzéke törlésre kerül, és a biztonsági másolatból új jön létre.", "wchange56": "FIGYELEM!", - "wchange57": "Memo" + "wchange57": "Memo", + "wchange58": "Új Cím" }, "tradepage": { "tchange1": "Kereskedelmi Portál", diff --git a/qortal-ui-core/language/it.json b/qortal-ui-core/language/it.json index bae18193..e3fc1a17 100644 --- a/qortal-ui-core/language/it.json +++ b/qortal-ui-core/language/it.json @@ -283,7 +283,8 @@ "wchange54": "Esporta rubrica", "wchange55": "La tua rubrica esistente verrà eliminata e dal backup verrà creata una nuova.", "wchange56": "AVVERTIMENTO!", - "wchange57": "Memo" + "wchange57": "Memo", + "wchange58": "Nuovo Indirizzo" }, "tradepage": { "tchange1": "Portale commerciale", diff --git a/qortal-ui-core/language/ko.json b/qortal-ui-core/language/ko.json index e07e921e..e4b607c1 100644 --- a/qortal-ui-core/language/ko.json +++ b/qortal-ui-core/language/ko.json @@ -283,7 +283,8 @@ "wchange54": "주소록 내보내기", "wchange55": "기존 주소록이 삭제되고 백업에서 새로 생성됩니다.", "wchange56": "경고!", - "wchange57": "메모" + "wchange57": "메모", + "wchange58": "새 주소" }, "tradepage": { "tchange1": "무역 포털", diff --git a/qortal-ui-core/language/no.json b/qortal-ui-core/language/no.json index f32175ed..66d07aab 100644 --- a/qortal-ui-core/language/no.json +++ b/qortal-ui-core/language/no.json @@ -283,7 +283,8 @@ "wchange54": "Eksporter adressebok", "wchange55": "Din eksisterende adressebok vil bli slettet og ny opprettet fra sikkerhetskopi.", "wchange56": "ADVARSEL!", - "wchange57": "Memo" + "wchange57": "Memo", + "wchange58": "Ny Adresse" }, "tradepage": { "tchange1": "Handelsportal", diff --git a/qortal-ui-core/language/pl.json b/qortal-ui-core/language/pl.json index ee1d4b14..19fb9bf4 100644 --- a/qortal-ui-core/language/pl.json +++ b/qortal-ui-core/language/pl.json @@ -283,7 +283,8 @@ "wchange54": "Eksportuj książkę adresową", "wchange55": "Twoja istniejąca książka adresowa zostanie usunięta, az kopii zapasowej utworzona nowa.", "wchange56": "OSTRZEŻENIE!", - "wchange57": "Memo" + "wchange57": "Memo", + "wchange58": "Nowy Adres" }, "tradepage": { "tchange1": "Portal Handlowy", diff --git a/qortal-ui-core/language/pt.json b/qortal-ui-core/language/pt.json index 6558c1f4..f4dd06c2 100644 --- a/qortal-ui-core/language/pt.json +++ b/qortal-ui-core/language/pt.json @@ -283,7 +283,8 @@ "wchange54": "Exportar catálogo de endereços", "wchange55": "Seu catálogo de endereços existente será excluído e o backup será criado novamente.", "wchange56": "AVISO!", - "wchange57": "Memorando" + "wchange57": "Memorando", + "wchange58": "Novo Endereço" }, "tradepage": { "tchange1": "Portal do Comércio", diff --git a/qortal-ui-core/language/ro.json b/qortal-ui-core/language/ro.json index e5908fb5..b1060649 100644 --- a/qortal-ui-core/language/ro.json +++ b/qortal-ui-core/language/ro.json @@ -283,7 +283,8 @@ "wchange54": "Exportati agenda de adrese", "wchange55": "Agenda dvs. existenta va fi stearsa si din backup va fi creata o noua.", "wchange56": "AVERTIZARE!", - "wchange57": "Nota" + "wchange57": "Nota", + "wchange58": "Adresa noua" }, "tradepage": { "tchange1": "Portal de Tranzactionare", diff --git a/qortal-ui-core/language/rs.json b/qortal-ui-core/language/rs.json index 1873c837..96f7a473 100644 --- a/qortal-ui-core/language/rs.json +++ b/qortal-ui-core/language/rs.json @@ -283,7 +283,8 @@ "wchange54": "Izvezi adresar", "wchange55": "Vaš postojeći adresar će biti obrisan, a iz rezervne kopije biće kreiran novi.", "wchange56": "UPOZORENJE!", - "wchange57": "Beleška" + "wchange57": "Beleška", + "wchange58": "Nova Adresa" }, "tradepage": { "tchange1": "Trgovinski prozor", diff --git a/qortal-ui-core/language/ru.json b/qortal-ui-core/language/ru.json index a27dce40..d8acd09f 100644 --- a/qortal-ui-core/language/ru.json +++ b/qortal-ui-core/language/ru.json @@ -283,7 +283,8 @@ "wchange54": "Экспорт адресной книги", "wchange55": "Ваша существующая адресная книга будет удалена, а из резервной копии создана новая.", "wchange56": "ПРЕДУПРЕЖДЕНИЕ!", - "wchange57": "Памятка" + "wchange57": "Памятка", + "wchange58": "Новый Адрес" }, "tradepage": { "tchange1": "Торговый портал", diff --git a/qortal-ui-core/language/us.json b/qortal-ui-core/language/us.json index 02bb9586..a47f6f5f 100644 --- a/qortal-ui-core/language/us.json +++ b/qortal-ui-core/language/us.json @@ -283,7 +283,8 @@ "wchange54": "Export Address Book", "wchange55": "Your existing address book will be deleted and from backup new created.", "wchange56": "WARNING!", - "wchange57": "Memo" + "wchange57": "Memo", + "wchange58": "New Address" }, "tradepage": { "tchange1": "Trade Portal", diff --git a/qortal-ui-core/language/zhc.json b/qortal-ui-core/language/zhc.json index ee0c77b5..6165e0f1 100644 --- a/qortal-ui-core/language/zhc.json +++ b/qortal-ui-core/language/zhc.json @@ -283,7 +283,8 @@ "wchange54": "导出通讯录", "wchange55": "您现有的通讯簿将被删除并从新创建的备份中。", "wchange56": "警告!", - "wchange57": "备忘录" + "wchange57": "备忘录", + "wchange58": "新的钱包地址" }, "tradepage": { "tchange1": "交易门户", diff --git a/qortal-ui-core/language/zht.json b/qortal-ui-core/language/zht.json index 1842d4d9..a7b440ba 100644 --- a/qortal-ui-core/language/zht.json +++ b/qortal-ui-core/language/zht.json @@ -283,7 +283,8 @@ "wchange54": "導出通訊錄", "wchange55": "您現有的通訊簿將被刪除並從新創建的備份中。", "wchange56": "警告!", - "wchange57": "備忘錄" + "wchange57": "備忘錄", + "wchange58": "新的錢包地址" }, "tradepage": { "tchange1": "交易門戶", diff --git a/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js b/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js index 6064cc83..01cf544f 100644 --- a/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js +++ b/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js @@ -507,8 +507,8 @@ class MultiWallet extends LitElement { } .unused-address-dialog { - min-height: 300px; - min-width: 300px; + min-height: 150px; + min-width: 550px; box-sizing: border-box; position: relative; } @@ -572,7 +572,7 @@ class MultiWallet extends LitElement { .unused-pos { margin-top: -44px; margin-left: 410px; - width: 250px; + width: 185px; } @media (max-width: 863px) { @@ -1990,11 +1990,24 @@ class MultiWallet extends LitElement {
    -

    Unused BTC Address

    +

    BTC


    ${this.wallets.get(this._selectedWallet).unusedWalletAddress} + + +
    + ${translate("walletpage.wchange38")}

    -

    Unused LTC Address

    +

    LTC


    ${this.wallets.get(this._selectedWallet).unusedWalletAddress} + + +
    + ${translate("walletpage.wchange38")}

    -

    Unused DOGE Address

    +

    DOGE


    ${this.wallets.get(this._selectedWallet).unusedWalletAddress} + + +
    + ${translate("walletpage.wchange38")}

    -

    Unused DGB Address

    +

    DGB


    ${this.wallets.get(this._selectedWallet).unusedWalletAddress} + + +
    + ${translate("walletpage.wchange38")}

    -

    Unused RVN Address

    +

    RVN


    ${this.wallets.get(this._selectedWallet).unusedWalletAddress} + + +
    + ${translate("walletpage.wchange38")}

    this.getUnusedAddress(this._selectedWallet)}>Get Unused Address` + return html` this.getUnusedAddress(this._selectedWallet)}> ${translate("walletpage.wchange58")}` case "btc": case "ltc": case "doge": case "dgb": case "rvn": - return html` this.getUnusedAddress(this._selectedWallet)}>Get Unused Address` + return html` this.getUnusedAddress(this._selectedWallet)}> ${translate("walletpage.wchange58")}` default: return html`` }