1
1
mirror of https://github.com/Fabio286/antares.git synced 2025-06-05 21:59:22 +02:00

Partial implementation of fields edit

This commit is contained in:
2020-06-27 15:14:08 +02:00
parent 28c3f87dd8
commit f350fe8203
11 changed files with 95 additions and 27 deletions

2
.github/FUNDING.yml vendored
View File

@ -9,4 +9,4 @@ community_bridge: # Replace with a single Community Bridge project-name e.g., cl
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
custom: ['https://paypal.me/fabiodistasio']

View File

@ -4,7 +4,7 @@
"version": "0.0.1-alpha",
"description": "A cross-platform easy to use SQL client.",
"license": "MIT",
"repository": "https://github.com/Fabio286/antares.git",
"repository": "https://github.com/EStarium/antares.git",
"scripts": {
"dev": "cross-env NODE_ENV=development electron-webpack dev",
"compile": "electron-webpack",

View File

@ -24,4 +24,14 @@ export default (connections) => {
return { status: 'error', response: err.toString() };
}
});
ipcMain.handle('updateTableCell', async (event, params) => {
try {
const result = await Generic.updateTableCell(connections[params.uid], params);
return { status: 'success', response: result };
}
catch (err) {
return { status: 'error', response: err.toString() };
}
});
};

View File

@ -145,6 +145,11 @@ export class AntaresConnector {
return this.raw(sql);
}
update (...args) {
this._query.update = [...this._query.update, ...args];
return this;
}
/**
* @returns {string} SQL string
* @memberof AntaresConnector
@ -152,7 +157,8 @@ export class AntaresConnector {
getSQL () {
// SELECT
const selectArray = this._query.select.reduce(this._reducer, []);
let selectRaw;
let selectRaw = '';
if (selectArray.length) {
switch (this._client) {
case 'maria':
case 'mysql':
@ -166,16 +172,20 @@ export class AntaresConnector {
default:
break;
}
}
// FROM
let fromRaw;
let fromRaw = '';
if (!this._query.update.length)
fromRaw = 'FROM';
switch (this._client) {
case 'maria':
case 'mysql':
fromRaw = this._query.from ? `FROM ${this._query.schema ? `\`${this._query.schema}\`.` : ''}\`${this._query.from}\` ` : '';
fromRaw += this._query.from ? ` ${this._query.schema ? `\`${this._query.schema}\`.` : ''}\`${this._query.from}\` ` : '';
break;
case 'mssql':
fromRaw = this._query.from ? `FROM ${this._query.schema ? `${this._query.schema}.` : ''}${this._query.from} ` : '';
fromRaw += this._query.from ? ` ${this._query.schema ? `${this._query.schema}.` : ''}${this._query.from} ` : '';
break;
default:
break;
@ -183,8 +193,13 @@ export class AntaresConnector {
const whereArray = this._query.where.reduce(this._reducer, []);
const whereRaw = whereArray.length ? `WHERE ${whereArray.join(' AND ')} ` : '';
const updateArray = this._query.update.reduce(this._reducer, []);
const updateRaw = updateArray.length ? `SET ${updateArray.join(', ')} ` : '';
const groupByArray = this._query.groupBy.reduce(this._reducer, []);
const groupByRaw = groupByArray.length ? `GROUP BY ${groupByArray.join(', ')} ` : '';
const orderByArray = this._query.orderBy.reduce(this._reducer, []);
const orderByRaw = orderByArray.length ? `ORDER BY ${orderByArray.join(', ')} ` : '';
@ -202,7 +217,7 @@ export class AntaresConnector {
break;
}
return `${selectRaw}${fromRaw}${whereRaw}${groupByRaw}${orderByRaw}${limitRaw}`;
return `${selectRaw}${updateRaw ? 'UPDATE' : ''}${fromRaw}${updateRaw}${whereRaw}${groupByRaw}${orderByRaw}${limitRaw}`;
}
/**

View File

@ -20,4 +20,13 @@ export default class {
.limit(1000)
.run();
}
static async updateTableCell (connection, params) { // TODO: Handle different field types
return connection
.update({ [params.field]: `= "${params.content}"` })
.schema(params.schema)
.from(params.table)
.where({ [params.primary]: `= ${params.id}` })
.run();
}
}

View File

@ -87,7 +87,7 @@
<h4>{{ appName }}</h4>
<p>
{{ $t('word.version') }}: {{ appVersion }}<br>
<a class="c-hand" @click="openOutside('https://github.com/Fabio286/antares')">GitHub</a><br>
<a class="c-hand" @click="openOutside('https://github.com/EStarium/antares')">GitHub</a><br>
<small>{{ $t('message.madeWithJS') }}</small>
</p>
</div>

View File

@ -11,11 +11,11 @@
<div class="footer-right-elements">
<ul class="footer-elements">
<li class="footer-element footer-link">
<li class="footer-element footer-link" @click="openOutside('https://www.patreon.com/fabio286')">
<i class="material-icons md-18 mr-1">favorite</i>
<small>{{ $t('word.donate') }}</small>
</li>
<li class="footer-element footer-link">
<li class="footer-element footer-link" @click="openOutside('https://github.com/EStarium/antares/issues')">
<i class="material-icons md-18">bug_report</i>
</li>
<li class="footer-element footer-link" @click="showSettingModal('about')">
@ -28,6 +28,7 @@
<script>
import { mapActions, mapGetters } from 'vuex';
const { shell } = require('electron');
export default {
name: 'TheFooter',
@ -40,7 +41,10 @@ export default {
methods: {
...mapActions({
showSettingModal: 'application/showSettingModal'
})
}),
openOutside (link) {
shell.openExternal(link);
}
}
};
</script>

View File

@ -40,7 +40,7 @@
:content="col"
:field="cKey"
:type="fieldType(cKey)"
@updateField="updateField"
@updateField="updateField($event, row[primaryField.name])"
/>
</div>
</div>
@ -128,10 +128,17 @@ export default {
}
}
},
updateField (payload) {
updateField (event, id) {
if (!this.primaryField)
this.addNotification({ status: 'warning', message: this.$t('message.unableEditFieldWithoutPrimary') });
console.log(payload);
else {
const params = {
primary: this.primaryField.name,
id,
...event
};
this.$emit('updateField', params);
}
}
}
};

View File

@ -120,8 +120,8 @@ export default {
this.isEditing = false;
if (this.localContent === this.content) return;
const { field, localContent: content } = this;
this.$emit('updateField', { field, content });
const { field, type, localContent: content } = this;
this.$emit('updateField', { field, type, content });
}
}
};

View File

@ -31,6 +31,7 @@
v-if="results"
:results="results"
:fields="resultsFields"
@updateField="updateField"
/>
</div>
</div>
@ -134,6 +135,24 @@ export default {
}
this.isQuering = false;
},
async updateField (payload) {
const params = {
uid: this.connection.uid,
schema: this.workspace.breadcrumbs.schema,
table: this.workspace.breadcrumbs.table,
...payload
};
console.log(params);
try {
const { status, response } = await Structure.updateTableCell(params);
if (status !== 'success')
this.addNotification({ status: 'error', message: response });
}
catch (err) {
this.addNotification({ status: 'error', message: err.stack });
}
}
}
};

View File

@ -9,4 +9,8 @@ export default class {
static getTableData (params) {
return ipcRenderer.invoke('getTableData', params);
}
static updateTableCell (params) {
return ipcRenderer.invoke('updateTableCell', params);
}
}