RSS Git Download  Clone
Raw Blame History 5kB 181 lines
p3xr.ng.component('p3xrMainKeyZset', {
    template: require('./p3xr-main-key-zset.html'),
    bindings: {
        p3xrValue: '=',
        p3xrValueBuffer: ' =',
        p3xrKey: '<',
        p3xrResponse: '<',
    },
    controller: function ($scope, p3xrCommon, p3xrSocket, p3xrDialogJsonView, p3xrDialogKeyNewOrSet, $rootScope, p3xrKeyPaging) {

        const self = this

        const keyPaging = new p3xrKeyPaging({
            $ctrl: self,
            $scope: $scope,
            watch: false,
            figurePagingType: 'zset',
        })


        this.$onInit = () => {
            keyPaging.figurePaging()
        }

        let page = 1
        const onPage = (n, o) => {
            values = []
            const index = p3xr.settings.keyPageCount * (this.page - 1)
            let indexKeys = 0
//            console.warn(this.generatedValue)
            for(let valueIndex in this.generatedValue) {
                if (indexKeys >= index && indexKeys < index + p3xr.settings.keyPageCount) {
                    values.push(this.generatedValue[valueIndex])
                }
                indexKeys++
            }
        }

        let values
        $scope.$watch('$ctrl.page', onPage)

        this.pageBasedList = () => {
            return values
        }


        this.copy = (opts) => {
            global.p3xr.clipboard({
                value: opts.value
            })
            p3xrCommon.toast(p3xr.strings.status.dataCopied)
        }


        this.downloadBuffer = async ({$index, $event}) => {
            try {
                /*
                const response = await p3xrSocket.request({
                    action: 'key-get-string-buffer',
                    payload: {
                        key: this.p3xrKey,
                    }
                })
                */
                //console.log('response', response)

                //console.log('$index', $index, 'this.p3xrValueBuffer', this.p3xrValueBuffer)
                //return

                const blob = new Blob([this.p3xrValueBuffer[($index * 2) ]]);
                const url = window.URL.createObjectURL(blob);
                const a = document.createElement('a');
                a.href = url;
                a.download = `${this.p3xrKey}.bin`;
                document.body.appendChild(a);
                a.click();
                window.URL.revokeObjectURL(url);
                document.body.removeChild(a);
            } catch (e) {
                p3xrCommon.generalHandleError(e)
            } finally {
            }
        }

        const generateHashFromRedisSortedSet = (value,) => {

            const generatedValue = [];
            let savedValue = undefined;
            for (let item of value) {
                if (savedValue === undefined) {
                    savedValue = item;
                } else {
                    generatedValue.push([
                        parseFloat(item),
                        savedValue
                    ])
                    savedValue = undefined
                }
            }
            return generatedValue;
        }

        let lastVal
        $scope.$watch('$ctrl.p3xrValue', (newVal, oldVal) => {
            if (newVal !== lastVal) {
                //console.warn('p3xr main key zset update')
                lastVal = newVal
                this.generatedValue = generateHashFromRedisSortedSet(this.p3xrValue)
                keyPaging.figurePaging()
                onPage()
            }
        })


        this.showJson = (options) => {
            const {value} = options;
            p3xrDialogJsonView.show({
                value: value
            })
        }

        this.addZSet = async (options) => {
            try {
                await p3xrDialogKeyNewOrSet.show({
                    type: 'append',
                    $event: options.$event,
                    model: {
                        type: 'zset',
                        key: this.p3xrKey
                    }
                })
                $rootScope.$broadcast('p3xr-refresh-key');
            } catch (e) {
                p3xrCommon.generalHandleError(e)
            }
        }


        this.deleteZSet = async (options) => {
            try {
                await p3xrCommon.confirm({
                    event: options.$event,
                    message: p3xr.strings.confirm.deleteZSetMember,
                })
                await p3xrSocket.request({
                    action: 'key-zset-delete-member',
                    payload: {
                        key: this.p3xrKey,
                        value: this.p3xrValueBuffer[options.$index * 2 ],
                    }
                })
                $rootScope.$broadcast('p3xr-refresh-key');
            } catch (e) {
                p3xrCommon.generalHandleError(e)
            }
        }

        this.editValue = async (options) => {
            try {
                const {member} = options
                await p3xrDialogKeyNewOrSet.show({
                    type: 'edit',
                    $event: options.$event,
                    model: {
                        type: 'zset',
                        score: options.score,
                        value: member.length < p3xr.settings.maxValueAsBuffer ?  member : this.p3xrValueBuffer[(options.$index * 2) ],
                        key: this.p3xrKey
                    }
                })
                $rootScope.$broadcast('p3xr-refresh-key');
            } catch (e) {
                p3xrCommon.generalHandleError(e)
            }
        }


    }
})