hadron-document
Advanced tools
Comparing version 0.0.0-next-fb4a1f2a7bd24298659048854c23ace5519cc4c8 to 0.0.0-next-fc7d8174c38f419f2dc8c5ffabd4d0943e284819
@@ -11,3 +11,9 @@ import type { Element } from './element'; | ||
Collapsed: string; | ||
VisibleElementsChanged: string; | ||
EditingStarted: string; | ||
EditingFinished: string; | ||
MarkedForDeletion: string; | ||
DeletionFinished: string; | ||
}; | ||
export declare const DEFAULT_VISIBLE_ELEMENTS = 25; | ||
export declare class Document extends EventEmitter { | ||
@@ -23,2 +29,5 @@ uuid: string; | ||
expanded: boolean; | ||
maxVisibleElementsCount: number; | ||
editing: boolean; | ||
markedForDeletion: boolean; | ||
cancel(): void; | ||
@@ -56,4 +65,18 @@ constructor(doc: BSONObject, cloned?: boolean); | ||
collapse(): void; | ||
getVisibleElements(): Element[]; | ||
setMaxVisibleElementsCount(newCount: number): void; | ||
getTotalVisibleElementsCount(): number; | ||
startEditing(elementId?: string, field?: 'key' | 'value' | 'type'): void; | ||
finishEditing(): void; | ||
onUpdateStart(): void; | ||
onUpdateSuccess(doc: Record<string, unknown>): void; | ||
onUpdateBlocked(): void; | ||
onUpdateError(error: Error): void; | ||
markForDeletion(): void; | ||
finishDeletion(): void; | ||
onRemoveStart(): void; | ||
onRemoveSuccess(): void; | ||
onRemoveError(error: Error): void; | ||
} | ||
export default Document; | ||
//# sourceMappingURL=document.d.ts.map |
@@ -6,3 +6,3 @@ 'use strict'; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.Document = exports.Events = void 0; | ||
exports.Document = exports.DEFAULT_VISIBLE_ELEMENTS = exports.Events = void 0; | ||
const element_1 = require("./element"); | ||
@@ -13,2 +13,3 @@ const eventemitter3_1 = __importDefault(require("eventemitter3")); | ||
const utils_1 = require("./utils"); | ||
const _1 = require("."); | ||
exports.Events = { | ||
@@ -18,4 +19,10 @@ Cancel: 'Document::Cancel', | ||
Collapsed: 'Document::Collapsed', | ||
VisibleElementsChanged: 'Document::VisibleElementsChanged', | ||
EditingStarted: 'Document::EditingStarted', | ||
EditingFinished: 'Document::EditingFinished', | ||
MarkedForDeletion: 'Document::MarkedForDeletion', | ||
DeletionFinished: 'Document::DeletionFinished', | ||
}; | ||
const ID = '_id'; | ||
exports.DEFAULT_VISIBLE_ELEMENTS = 25; | ||
class Document extends eventemitter3_1.default { | ||
@@ -32,2 +39,5 @@ cancel() { | ||
this.expanded = false; | ||
this.maxVisibleElementsCount = exports.DEFAULT_VISIBLE_ELEMENTS; | ||
this.editing = false; | ||
this.markedForDeletion = false; | ||
this.uuid = new bson_1.UUID().toHexString(); | ||
@@ -129,2 +139,3 @@ this.doc = doc; | ||
newElement._bubbleUp(element_1.Events.Added, newElement, this); | ||
this.emit(exports.Events.VisibleElementsChanged, this); | ||
return newElement; | ||
@@ -135,2 +146,3 @@ } | ||
newElement._bubbleUp(element_1.Events.Added, newElement, this); | ||
this.emit(exports.Events.VisibleElementsChanged, this); | ||
return newElement; | ||
@@ -141,2 +153,3 @@ } | ||
newElement?._bubbleUp(element_1.Events.Added, newElement, this); | ||
this.emit(exports.Events.VisibleElementsChanged, this); | ||
return newElement; | ||
@@ -189,2 +202,3 @@ } | ||
this.emit(exports.Events.Expanded); | ||
this.emit(exports.Events.VisibleElementsChanged, this); | ||
} | ||
@@ -197,3 +211,64 @@ collapse() { | ||
this.emit(exports.Events.Collapsed); | ||
this.emit(exports.Events.VisibleElementsChanged, this); | ||
} | ||
getVisibleElements() { | ||
return [...this.elements].slice(0, this.maxVisibleElementsCount); | ||
} | ||
setMaxVisibleElementsCount(newCount) { | ||
this.maxVisibleElementsCount = newCount; | ||
this.emit(exports.Events.VisibleElementsChanged, this); | ||
} | ||
getTotalVisibleElementsCount() { | ||
const visibleElements = this.getVisibleElements(); | ||
return visibleElements.reduce((totalVisibleChildElements, element) => { | ||
return (totalVisibleChildElements + 1 + element.getTotalVisibleElementsCount()); | ||
}, 0); | ||
} | ||
startEditing(elementId, field) { | ||
if (!this.editing) { | ||
this.editing = true; | ||
this.emit(_1.DocumentEvents.EditingStarted, elementId, field); | ||
} | ||
} | ||
finishEditing() { | ||
if (this.editing) { | ||
this.editing = false; | ||
this.emit(_1.DocumentEvents.EditingFinished); | ||
} | ||
} | ||
onUpdateStart() { | ||
this.emit('update-start'); | ||
} | ||
onUpdateSuccess(doc) { | ||
this.emit('update-success', doc); | ||
this.finishEditing(); | ||
} | ||
onUpdateBlocked() { | ||
this.emit('update-blocked'); | ||
} | ||
onUpdateError(error) { | ||
this.emit('update-error', error.message); | ||
} | ||
markForDeletion() { | ||
if (!this.markedForDeletion) { | ||
this.markedForDeletion = true; | ||
this.emit(_1.DocumentEvents.MarkedForDeletion); | ||
} | ||
} | ||
finishDeletion() { | ||
if (this.markedForDeletion) { | ||
this.markedForDeletion = false; | ||
this.emit(_1.DocumentEvents.DeletionFinished); | ||
} | ||
} | ||
onRemoveStart() { | ||
this.emit('remove-start'); | ||
} | ||
onRemoveSuccess() { | ||
this.emit('remove-success'); | ||
this.finishDeletion(); | ||
} | ||
onRemoveError(error) { | ||
this.emit('remove-error', error.message); | ||
} | ||
} | ||
@@ -200,0 +275,0 @@ exports.Document = Document; |
@@ -59,5 +59,9 @@ "use strict"; | ||
_formattedValue() { | ||
return new Date(this.element.currentValue) | ||
.toISOString() | ||
.replace('Z', '+00:00'); | ||
const date = new Date(this.element.currentValue); | ||
try { | ||
return date.toISOString().replace('Z', '+00:00'); | ||
} | ||
catch { | ||
return String(date); | ||
} | ||
} | ||
@@ -64,0 +68,0 @@ } |
@@ -11,4 +11,5 @@ declare const _default: { | ||
readonly Collapsed: "Element::Collapsed"; | ||
readonly VisibleElementsChanged: "Element::VisibleElementsChanged"; | ||
}; | ||
export default _default; | ||
//# sourceMappingURL=element-events.d.ts.map |
@@ -13,3 +13,4 @@ "use strict"; | ||
Collapsed: 'Element::Collapsed', | ||
VisibleElementsChanged: 'Element::VisibleElementsChanged', | ||
}; | ||
//# sourceMappingURL=element-events.js.map |
@@ -11,2 +11,4 @@ import EventEmitter from 'eventemitter3'; | ||
export declare function isInternalFieldPath(path: string | number): boolean; | ||
export declare const DEFAULT_VISIBLE_ELEMENTS = 25; | ||
export declare function isValueExpandable(value: BSONValue): value is BSONObject | BSONArray; | ||
export declare class Element extends EventEmitter { | ||
@@ -30,2 +32,3 @@ uuid: string; | ||
expanded: boolean; | ||
maxVisibleElementsCount: number; | ||
cancel(): void; | ||
@@ -57,2 +60,3 @@ constructor(key: string | number, value: BSONValue | number, parent?: Element | Document | null, added?: boolean); | ||
_isObjectIdEqual(): boolean; | ||
_isExpandable(): boolean; | ||
isLast(): boolean; | ||
@@ -83,5 +87,8 @@ isRenamed(): boolean; | ||
_isElementEmpty(element: Element | undefined | null): boolean; | ||
_isExpandable(value: BSONValue): value is BSONObject | BSONArray; | ||
_generateElements(object: BSONObject | BSONArray): ElementList; | ||
_removeAddedElements(): void; | ||
getVisibleElements(): Element[]; | ||
setMaxVisibleElementsCount(newCount: number): void; | ||
getTotalVisibleElementsCount(): number; | ||
private emitVisibleElementsChanged; | ||
static get Events(): typeof ElementEvents; | ||
@@ -88,0 +95,0 @@ } |
@@ -6,3 +6,3 @@ 'use strict'; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.ElementList = exports.Element = exports.isInternalFieldPath = exports.Events = exports.DATE_FORMAT = void 0; | ||
exports.ElementList = exports.Element = exports.isValueExpandable = exports.DEFAULT_VISIBLE_ELEMENTS = exports.isInternalFieldPath = exports.Events = exports.DATE_FORMAT = void 0; | ||
const eventemitter3_1 = __importDefault(require("eventemitter3")); | ||
@@ -35,2 +35,7 @@ const lodash_1 = require("lodash"); | ||
]; | ||
exports.DEFAULT_VISIBLE_ELEMENTS = 25; | ||
function isValueExpandable(value) { | ||
return (0, lodash_1.isPlainObject)(value) || (0, lodash_1.isArray)(value); | ||
} | ||
exports.isValueExpandable = isValueExpandable; | ||
class Element extends eventemitter3_1.default { | ||
@@ -50,2 +55,3 @@ cancel() { | ||
this.expanded = false; | ||
this.maxVisibleElementsCount = exports.DEFAULT_VISIBLE_ELEMENTS; | ||
this.uuid = new bson_1.UUID().toHexString(); | ||
@@ -64,3 +70,3 @@ this.key = key; | ||
} | ||
if (this._isExpandable(value)) { | ||
if (isValueExpandable(value)) { | ||
this.originalExpandableValue = value; | ||
@@ -101,7 +107,7 @@ this.elements = this._generateElements(value); | ||
this.currentType = hadron_type_checker_1.default.type(value); | ||
if (this._isExpandable(value) && !this._isExpandable(this.currentValue)) { | ||
if (isValueExpandable(value) && !isValueExpandable(this.currentValue)) { | ||
this.currentValue = null; | ||
this.elements = this._generateElements(value); | ||
} | ||
else if (!this._isExpandable(value) && this.elements) { | ||
else if (!isValueExpandable(value) && this.elements) { | ||
this.currentValue = value; | ||
@@ -182,2 +188,3 @@ this.elements = undefined; | ||
newElement._bubbleUp(element_events_1.default.Added, newElement, this); | ||
this.emitVisibleElementsChanged(); | ||
return newElement; | ||
@@ -191,2 +198,3 @@ } | ||
this._bubbleUp(element_events_1.default.Added, newElement); | ||
this.emitVisibleElementsChanged(); | ||
return newElement; | ||
@@ -261,2 +269,5 @@ } | ||
} | ||
_isExpandable() { | ||
return this.currentType === 'Array' || this.currentType === 'Object'; | ||
} | ||
isLast() { | ||
@@ -362,2 +373,3 @@ return this.parent?.elements?.lastElement === this; | ||
this._bubbleUp(element_events_1.default.Removed, this, this.parent); | ||
this.emitVisibleElementsChanged(this.parent); | ||
} | ||
@@ -369,2 +381,5 @@ } | ||
this._bubbleUp(element_events_1.default.Removed, this, this.parent); | ||
if (this.parent) { | ||
this.emitVisibleElementsChanged(this.parent); | ||
} | ||
delete this.parent; | ||
@@ -394,3 +409,3 @@ } | ||
expand(expandChildren = false) { | ||
if (!this._isExpandable(this.originalExpandableValue)) { | ||
if (!this._isExpandable()) { | ||
return; | ||
@@ -405,5 +420,6 @@ } | ||
this.emit(_1.ElementEvents.Expanded, this); | ||
this.emitVisibleElementsChanged(); | ||
} | ||
collapse() { | ||
if (!this._isExpandable(this.originalExpandableValue)) { | ||
if (!this._isExpandable()) { | ||
return; | ||
@@ -418,2 +434,3 @@ } | ||
this.emit(_1.ElementEvents.Collapsed, this); | ||
this.emitVisibleElementsChanged(); | ||
} | ||
@@ -443,5 +460,2 @@ _bubbleUp(evt, ...data) { | ||
} | ||
_isExpandable(value) { | ||
return (0, lodash_1.isPlainObject)(value) || (0, lodash_1.isArray)(value); | ||
} | ||
_generateElements(object) { | ||
@@ -459,2 +473,31 @@ return new ElementList(this, object); | ||
} | ||
getVisibleElements() { | ||
if (!this.elements || !this.expanded) { | ||
return []; | ||
} | ||
return [...this.elements].slice(0, this.maxVisibleElementsCount); | ||
} | ||
setMaxVisibleElementsCount(newCount) { | ||
if (!this._isExpandable()) { | ||
return; | ||
} | ||
this.maxVisibleElementsCount = newCount; | ||
this.emitVisibleElementsChanged(); | ||
} | ||
getTotalVisibleElementsCount() { | ||
if (!this.elements || !this.expanded) { | ||
return 0; | ||
} | ||
return this.getVisibleElements().reduce((totalVisibleChildElements, element) => { | ||
return (totalVisibleChildElements + 1 + element.getTotalVisibleElementsCount()); | ||
}, 0); | ||
} | ||
emitVisibleElementsChanged(targetElement = this) { | ||
if (targetElement.isRoot()) { | ||
targetElement.emit(_1.DocumentEvents.VisibleElementsChanged, targetElement); | ||
} | ||
else if (targetElement.expanded) { | ||
targetElement._bubbleUp(element_events_1.default.VisibleElementsChanged, targetElement, targetElement.getRoot()); | ||
} | ||
} | ||
static get Events() { | ||
@@ -461,0 +504,0 @@ return _1.ElementEvents; |
@@ -1,3 +0,3 @@ | ||
import Document, { Events as DocumentEvents } from './document'; | ||
import Element, { Events as ElementEvents, isInternalFieldPath } from './element'; | ||
import Document, { Events as DocumentEvents, DEFAULT_VISIBLE_ELEMENTS as DEFAULT_VISIBLE_DOCUMENT_ELEMENTS } from './document'; | ||
import Element, { Events as ElementEvents, isInternalFieldPath, DEFAULT_VISIBLE_ELEMENTS } from './element'; | ||
import ElementEditor from './editor'; | ||
@@ -8,3 +8,3 @@ import type { Editor } from './editor'; | ||
export type { Editor }; | ||
export { Document, DocumentEvents, Element, ElementEvents, ElementEditor, isInternalFieldPath, getDefaultValueForType, objectToIdiomaticEJSON, }; | ||
export { Document, DocumentEvents, DEFAULT_VISIBLE_DOCUMENT_ELEMENTS, Element, ElementEvents, DEFAULT_VISIBLE_ELEMENTS, ElementEditor, isInternalFieldPath, getDefaultValueForType, objectToIdiomaticEJSON, }; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -29,6 +29,7 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.objectToIdiomaticEJSON = exports.getDefaultValueForType = exports.isInternalFieldPath = exports.ElementEditor = exports.ElementEvents = exports.Element = exports.DocumentEvents = exports.Document = void 0; | ||
exports.objectToIdiomaticEJSON = exports.getDefaultValueForType = exports.isInternalFieldPath = exports.ElementEditor = exports.DEFAULT_VISIBLE_ELEMENTS = exports.ElementEvents = exports.Element = exports.DEFAULT_VISIBLE_DOCUMENT_ELEMENTS = exports.DocumentEvents = exports.Document = void 0; | ||
const document_1 = __importStar(require("./document")); | ||
exports.Document = document_1.default; | ||
Object.defineProperty(exports, "DocumentEvents", { enumerable: true, get: function () { return document_1.Events; } }); | ||
Object.defineProperty(exports, "DEFAULT_VISIBLE_DOCUMENT_ELEMENTS", { enumerable: true, get: function () { return document_1.DEFAULT_VISIBLE_ELEMENTS; } }); | ||
const element_1 = __importStar(require("./element")); | ||
@@ -38,2 +39,3 @@ exports.Element = element_1.default; | ||
Object.defineProperty(exports, "isInternalFieldPath", { enumerable: true, get: function () { return element_1.isInternalFieldPath; } }); | ||
Object.defineProperty(exports, "DEFAULT_VISIBLE_ELEMENTS", { enumerable: true, get: function () { return element_1.DEFAULT_VISIBLE_ELEMENTS; } }); | ||
const editor_1 = __importDefault(require("./editor")); | ||
@@ -40,0 +42,0 @@ exports.ElementEditor = editor_1.default; |
@@ -10,3 +10,3 @@ { | ||
"homepage": "https://github.com/mongodb-js/compass", | ||
"version": "0.0.0-next-fb4a1f2a7bd24298659048854c23ace5519cc4c8", | ||
"version": "0.0.0-next-fc7d8174c38f419f2dc8c5ffabd4d0943e284819", | ||
"repository": { | ||
@@ -37,3 +37,3 @@ "type": "git", | ||
"compile": "tsc -p tsconfig.json", | ||
"depcheck": "depcheck", | ||
"depcheck": "compass-scripts check-peer-deps && depcheck", | ||
"eslint": "eslint", | ||
@@ -51,13 +51,12 @@ "prettier": "prettier", | ||
"dependencies": { | ||
"bson": "^6.2.0", | ||
"debug": "^4.2.0", | ||
"bson": "^6.7.0", | ||
"eventemitter3": "^4.0.0", | ||
"hadron-type-checker": "0.0.0-next-fb4a1f2a7bd24298659048854c23ace5519cc4c8", | ||
"hadron-type-checker": "0.0.0-next-fc7d8174c38f419f2dc8c5ffabd4d0943e284819", | ||
"lodash": "^4.17.21" | ||
}, | ||
"devDependencies": { | ||
"@mongodb-js/eslint-config-compass": "0.0.0-next-fb4a1f2a7bd24298659048854c23ace5519cc4c8", | ||
"@mongodb-js/mocha-config-compass": "0.0.0-next-fb4a1f2a7bd24298659048854c23ace5519cc4c8", | ||
"@mongodb-js/prettier-config-compass": "0.0.0-next-fb4a1f2a7bd24298659048854c23ace5519cc4c8", | ||
"@mongodb-js/tsconfig-compass": "0.0.0-next-fb4a1f2a7bd24298659048854c23ace5519cc4c8", | ||
"@mongodb-js/eslint-config-compass": "0.0.0-next-fc7d8174c38f419f2dc8c5ffabd4d0943e284819", | ||
"@mongodb-js/mocha-config-compass": "0.0.0-next-fc7d8174c38f419f2dc8c5ffabd4d0943e284819", | ||
"@mongodb-js/prettier-config-compass": "0.0.0-next-fc7d8174c38f419f2dc8c5ffabd4d0943e284819", | ||
"@mongodb-js/tsconfig-compass": "0.0.0-next-fc7d8174c38f419f2dc8c5ffabd4d0943e284819", | ||
"chai": "^4.2.0", | ||
@@ -72,3 +71,3 @@ "depcheck": "^1.4.1", | ||
}, | ||
"gitHead": "fb4a1f2a7bd24298659048854c23ace5519cc4c8" | ||
"gitHead": "fc7d8174c38f419f2dc8c5ffabd4d0943e284819" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
175532
4
2060
+ Addedhadron-type-checker@0.0.0-next-fc7d8174c38f419f2dc8c5ffabd4d0943e284819(transitive)
- Removeddebug@^4.2.0
- Removeddebug@4.4.0(transitive)
- Removedhadron-type-checker@0.0.0-next-fb4a1f2a7bd24298659048854c23ace5519cc4c8(transitive)
- Removedms@2.1.3(transitive)
Updatedbson@^6.7.0
Updatedhadron-type-checker@0.0.0-next-fc7d8174c38f419f2dc8c5ffabd4d0943e284819