Update.
This commit is contained in:
parent
0dc75452d6
commit
213136b92e
@ -1,5 +1,5 @@
|
|||||||
import { app } from "./app.js";
|
import { app } from "./app.js";
|
||||||
import { NjetComponent } from "./njet.js";
|
import { NjetComponent,eventBus } from "./njet.js";
|
||||||
import { FileUploadGrid } from "./file-upload-grid.js";
|
import { FileUploadGrid } from "./file-upload-grid.js";
|
||||||
|
|
||||||
class ChatInputComponent extends NjetComponent {
|
class ChatInputComponent extends NjetComponent {
|
||||||
@ -179,17 +179,31 @@ class ChatInputComponent extends NjetComponent {
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
this.fileUploadGrid.openFileDialog();
|
this.fileUploadGrid.openFileDialog();
|
||||||
});
|
});
|
||||||
this.subscribe("file-uploading", (e) => {
|
eventBus.subscribe("file-uploading", (e) => {
|
||||||
this.fileUploadGrid.style.display = "block";
|
this.fileUploadGrid.style.display = "block";
|
||||||
this.uploadButton.style.display = "none";
|
this.uploadButton.style.display = "none";
|
||||||
this.textarea.style.display = "none";
|
this.textarea.style.display = "none";
|
||||||
});
|
})
|
||||||
|
document.eventBus = eventBus;
|
||||||
this.appendChild(this.uploadButton);
|
this.appendChild(this.uploadButton);
|
||||||
|
|
||||||
this.textarea.addEventListener("blur", () => {
|
this.textarea.addEventListener("blur", () => {
|
||||||
this.updateFromInput("");
|
this.updateFromInput("");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
eventBus.subscribe("file-uploads-done", (data)=>{
|
||||||
|
console.info("JEEJ", data)
|
||||||
|
this.textarea.style.display = "block";
|
||||||
|
this.uploadButton.style.display = "block";
|
||||||
|
this.fileUploadGrid.style.display = "none";
|
||||||
|
let message =data.reduce((file) => {
|
||||||
|
return `${message}[${file.filename}](/channel/attachment/${file.file})`;
|
||||||
|
}, '');
|
||||||
|
app.rpc.sendMessage(this.channelUid, message, true);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
this.textarea.addEventListener("keyup", (e) => {
|
this.textarea.addEventListener("keyup", (e) => {
|
||||||
if (e.key === "Enter" && !e.shiftKey) {
|
if (e.key === "Enter" && !e.shiftKey) {
|
||||||
const message = this.replaceMentionsWithAuthors(this.value);
|
const message = this.replaceMentionsWithAuthors(this.value);
|
||||||
|
@ -57,6 +57,7 @@ class FileUploadGrid extends NjetComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
reset(){
|
reset(){
|
||||||
|
this.uploadResponses = [];
|
||||||
this.uploadsDone = 0;
|
this.uploadsDone = 0;
|
||||||
this.uploadsStarted = 0;
|
this.uploadsStarted = 0;
|
||||||
this._grid.innerHTML = '';
|
this._grid.innerHTML = '';
|
||||||
@ -70,6 +71,7 @@ class FileUploadGrid extends NjetComponent {
|
|||||||
this.reset()
|
this.reset()
|
||||||
this.uploadsDone = 0;
|
this.uploadsDone = 0;
|
||||||
this.uploadsStarted = files.length;
|
this.uploadsStarted = files.length;
|
||||||
|
|
||||||
[...files].forEach(file => this.createTile(file));
|
[...files].forEach(file => this.createTile(file));
|
||||||
}
|
}
|
||||||
connectedCallback() {
|
connectedCallback() {
|
||||||
@ -157,14 +159,20 @@ class FileUploadGrid extends NjetComponent {
|
|||||||
progress.style.width = pct + '%';
|
progress.style.width = pct + '%';
|
||||||
this.publish('file-uploading', {file: file, tile: tile, progress: progress});
|
this.publish('file-uploading', {file: file, tile: tile, progress: progress});
|
||||||
} else if (data.type === 'done') {
|
} else if (data.type === 'done') {
|
||||||
|
console.info("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH")
|
||||||
|
console.info("Done")
|
||||||
|
console.info(this.uploadResponses)
|
||||||
this.uploadsDone += 1;
|
this.uploadsDone += 1;
|
||||||
this.publish('file-uploaded', {file: file, tile: tile, progress: progress});
|
this.publish('file-uploaded', {file: file, tile: tile, progress: progress});
|
||||||
progress.style.width = '100%';
|
progress.style.width = '100%';
|
||||||
tile.classList.add('fug-done');
|
tile.classList.add('fug-done');
|
||||||
console.info("Closed")
|
console.info("Closed")
|
||||||
ws.close();
|
ws.close();
|
||||||
|
this.uploadResponses.push({file:file, remoteFile:data.file})
|
||||||
|
console.info(this.uploadsDone, this.uploadsStarted)
|
||||||
|
if(this.uploadsDone == this.uploadsStarted){
|
||||||
|
this.publish('file-uploads-done', this.uploadResponses);
|
||||||
|
}
|
||||||
this.reset()
|
this.reset()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -210,19 +210,18 @@ class Njet extends HTMLElement {
|
|||||||
customElements.define(name, component);
|
customElements.define(name, component);
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(config = {}) {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
if (!Njet._root) {
|
if (!Njet._root) {
|
||||||
Njet._root = this
|
Njet._root = this
|
||||||
Njet._rest = new RestClient({ baseURL: config.baseURL || null })
|
Njet._rest = new RestClient({ baseURL: '/' || null })
|
||||||
}
|
}
|
||||||
this.root._elements.push(this)
|
this.root._elements.push(this)
|
||||||
this.classList.add('njet');
|
this.classList.add('njet');
|
||||||
this.config = config;
|
|
||||||
this.render.call(this);
|
this.render.call(this);
|
||||||
this.initProps(config);
|
//this.initProps(config);
|
||||||
if (typeof this.construct === 'function')
|
//if (typeof this.config.construct === 'function')
|
||||||
this.construct.call(this)
|
// this.config.construct.call(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
initProps(config) {
|
initProps(config) {
|
||||||
@ -284,9 +283,12 @@ class Njet extends HTMLElement {
|
|||||||
|
|
||||||
render() {}
|
render() {}
|
||||||
}
|
}
|
||||||
|
Njet.registerComponent('njet-root', Njet);
|
||||||
|
|
||||||
class Component extends Njet {}
|
class Component extends Njet {}
|
||||||
|
|
||||||
|
Njet.registerComponent('njet-component', Component);
|
||||||
|
|
||||||
class NjetPanel extends Component {
|
class NjetPanel extends Component {
|
||||||
render() {
|
render() {
|
||||||
this.innerHTML = '';
|
this.innerHTML = '';
|
||||||
@ -491,18 +493,67 @@ document.body.appendChild(dialog);
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
class NjetComponent extends Component {}
|
class NjetComponent extends Component {}
|
||||||
const njet = Njet;
|
const njet = Njet
|
||||||
njet.showDialog = function(args){
|
njet.showDialog = function(args){
|
||||||
const dialog = new NjetDialog(args)
|
const dialog = new NjetDialog(args)
|
||||||
dialog.show()
|
dialog.show()
|
||||||
return dialog
|
return dialog
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class EventBus extends EventTarget {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.eventMap = new Map();
|
||||||
|
}
|
||||||
|
|
||||||
|
subscribe(eventName, callback) {
|
||||||
|
this.addEventListener(eventName, callback);
|
||||||
|
|
||||||
|
if (!this.eventMap.has(eventName)) {
|
||||||
|
this.eventMap.set(eventName, []);
|
||||||
|
}
|
||||||
|
this.eventMap.get(eventName).push(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
publish(eventName, detail = {}) {
|
||||||
|
const event = new CustomEvent(eventName, {
|
||||||
|
detail,
|
||||||
|
bubbles: true,
|
||||||
|
cancelable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
document.dispatchEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsubscribe(eventName, callback) {
|
||||||
|
this.removeEventListener(eventName, callback);
|
||||||
|
|
||||||
|
const subscribers = this.eventMap.get(eventName);
|
||||||
|
if (subscribers) {
|
||||||
|
const index = subscribers.indexOf(callback);
|
||||||
|
if (index > -1) subscribers.splice(index, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const eventBus = new EventBus()
|
||||||
|
|
||||||
|
|
||||||
njet.showWindow = function(args) {
|
njet.showWindow = function(args) {
|
||||||
const w = new NjetWindow(args)
|
const w = new NjetWindow(args)
|
||||||
w.show()
|
w.show()
|
||||||
return w
|
return w
|
||||||
}
|
}
|
||||||
|
njet.publish = function(event, data) {
|
||||||
|
if (this.root._subscriptions[event]) {
|
||||||
|
this.root._subscriptions[event].forEach(callback => callback(data))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
njet.subscribe = function(event, callback) {
|
||||||
|
if (!this.root._subscriptions[event]) {
|
||||||
|
this.root._subscriptions[event] = []
|
||||||
|
}
|
||||||
|
this.root._subscriptions[event].push(callback)
|
||||||
|
}
|
||||||
|
|
||||||
window.njet = njet
|
export { Njet, NjetButton, NjetPanel, NjetDialog, NjetGrid, NjetComponent, njet, NjetWindow,eventBus };
|
||||||
|
|
||||||
export { Njet, NjetButton, NjetPanel, NjetDialog, NjetGrid, NjetComponent, njet, NjetWindow };
|
|
||||||
|
@ -206,7 +206,8 @@ class ChannelAttachmentUploadView(BaseView):
|
|||||||
print(msg.json())
|
print(msg.json())
|
||||||
data = msg.json()
|
data = msg.json()
|
||||||
if data.get('type') == 'end':
|
if data.get('type') == 'end':
|
||||||
await ws.send_json({"type": "done", "filename": filename})
|
relative_url = urllib.parse.quote(attachment_record["relative_url"])
|
||||||
|
await ws.send_json({"type": "done", "file": relative_url, "filename": filename})
|
||||||
elif msg.type == web.WSMsgType.ERROR:
|
elif msg.type == web.WSMsgType.ERROR:
|
||||||
break
|
break
|
||||||
return ws
|
return ws
|
||||||
|
@ -269,6 +269,10 @@ class RPCView(BaseView):
|
|||||||
|
|
||||||
async def send_message(self, channel_uid, message, is_final=True):
|
async def send_message(self, channel_uid, message, is_final=True):
|
||||||
self._require_login()
|
self._require_login()
|
||||||
|
|
||||||
|
message = await self.services.channel_message.get(channel_uid=channel_uid, user_uid=self.user_uid,is_final=False)
|
||||||
|
if message:
|
||||||
|
return await self.update_message_text(message["uid"], message)
|
||||||
message = await self.services.chat.send(
|
message = await self.services.chat.send(
|
||||||
self.user_uid, channel_uid, message, is_final
|
self.user_uid, channel_uid, message, is_final
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user