1
1
import { CallableCell } from '@holochain/tryorama' ;
2
2
import { NewEntryAction , ActionHash , Record , AppBundleSource , fakeActionHash , fakeAgentPubKey , fakeEntryHash , fakeDnaHash } from '@holochain/client' ;
3
- import { BaseValue , BaseValueList , DanceRequest , Holon , WithPropertyInput , DanceTypeEnum , RequestBodyEnum , DanceResponse , DanceType , RequestBody , DanceTypeObject , RequestBodyObject , TargetHolons , StagingArea , PropertyMap } from './types' ;
4
-
5
- export function build_dance_request ( danceName :string ) :DanceRequest {
6
- return {
7
- dance_name :danceName ,
8
- dance_type :{ [ DanceTypeEnum . Standalone ] :null } ,
9
- body : { [ RequestBodyEnum . None ] :null } ,
10
- staging_area : { staged_holons :[ ] , index :{ } }
11
- }
12
- }
3
+ import { BaseValue , BaseValueList , DanceRequestObject , Holon , WithPropertyInput , DanceTypeEnum , RequestBodyEnum , DanceResponseObject , DanceType , RequestBody , DanceTypeObject , RequestBodyObject , TargetHolons , StagingArea , PropertyMap , ResponseStatusCode , ResponseBody , HolonReference , ResponseBodyEnum } from './types' ;
13
4
14
- export function send_dance_request ( cell : CallableCell , name :string , type :DanceTypeObject , body :RequestBodyObject , stage :StagingArea ) :Promise < DanceResponse > {
15
- const data :DanceRequest = {
5
+
6
+ export function send_dance_request ( cell : CallableCell , name :string , type :DanceTypeObject , body :RequestBodyObject ) :Promise < DanceResponseObject > {
7
+ const data :DanceRequestObject = {
16
8
dance_name :name ,
17
9
dance_type :type ,
18
10
body : body ,
19
- staging_area : stage
11
+ staging_area :{ staged_holons :[ ] , index :{ } }
12
+
20
13
}
21
14
return cell . callZome ( { zome_name : "dances" , fn_name : "dance" , payload : data } )
22
15
}
23
16
24
- export async function sampleHolon ( cell : CallableCell , partialHolon = { } ) {
25
- return {
26
- ...{
27
- descriptor : ( await fakeActionHash ( ) ) ,
28
- } ,
29
- ...partialHolon
30
- } ;
31
- }
32
17
33
18
export function createHolon ( props :PropertyMap ) :Holon {
34
19
return {
@@ -44,7 +29,7 @@ export function createHolon(props:PropertyMap):Holon {
44
29
}
45
30
46
31
47
- export async function addProperty ( cell : CallableCell , emptyholon : Holon , property :string = undefined , propertyvalue :BaseValueList = undefined ) : Promise < Holon > {
32
+ export async function withProperty ( cell : CallableCell , emptyholon : Holon , property :string = undefined , propertyvalue :BaseValueList = undefined ) : Promise < Holon > {
48
33
const propertyObject : WithPropertyInput = { holon : emptyholon , property_name :property , value :propertyvalue }
49
34
return cell . callZome ( {
50
35
zome_name : "holons" ,
@@ -55,20 +40,109 @@ export async function addProperty(cell: CallableCell, emptyholon: Holon, propert
55
40
56
41
57
42
58
- export async function sampleHolonNode ( cell : CallableCell , partialHolonNode = { } ) {
59
- return {
60
- ...{
61
- dummy_field : "Lorem ipsum dolor sit amet, consectetur adipiscing elit." ,
62
- } ,
63
- ...partialHolonNode
64
- } ;
43
+ // alternative helper class
44
+ export class DanceResponse {
45
+ public status_code : ResponseStatusCode
46
+ public description : string
47
+ public body : ResponseBody
48
+ public descriptor ?: HolonReference // space_id+holon_id of DanceDescriptor
49
+ private staging_area : StagingArea
50
+
51
+ constructor ( private dr :DanceResponseObject ) {
52
+ this . status_code = dr . status_code
53
+ this . description = dr . description
54
+ this . body = dr . body
55
+ this . descriptor = dr . descriptor
56
+ this . staging_area = dr . staging_area
57
+ }
58
+
59
+ getStagedObjects ( ) {
60
+ return this . staging_area . staged_holons
61
+ }
62
+
63
+ getStagedIndex ( ) {
64
+ return this . staging_area . index
65
+ }
66
+ //wip
67
+ findIndexbyKey ( key :string ) :number {
68
+ if ( this . body . type === ResponseBodyEnum . Holons )
69
+ return 0
70
+ return 0
71
+ }
72
+
65
73
}
66
74
67
- export async function createHolonNode ( cell : CallableCell , holonNode = undefined ) : Promise < Record > {
68
- return cell . callZome ( {
69
- zome_name : "holons" ,
70
- fn_name : "create_holon_node" ,
71
- payload : holonNode || await sampleHolonNode ( cell ) ,
72
- } ) ;
75
+ //helper classes
76
+ export class DanceRequest {
77
+ zome_name = "dances"
78
+ zome_fn = "dance"
79
+ cell :CallableCell
80
+ staging_area : StagingArea = { staged_holons :[ ] , index :{ } }
81
+
82
+ constructor ( private agent :CallableCell ) {
83
+ this . cell = agent
84
+ }
85
+
86
+ private async callzome ( data :DanceRequestObject ) :Promise < DanceResponse > {
87
+ const response :DanceResponseObject = await this . cell . callZome ( { zome_name : this . zome_name , fn_name : this . zome_fn , payload : data } )
88
+ this . staging_area = response . staging_area
89
+ return new DanceResponse ( response )
90
+ }
91
+
92
+ // readall is standalone request with no parameters or properties
93
+ public async readall ( name :string ) :Promise < DanceResponse > {
94
+ const dro :DanceRequestObject = {
95
+ dance_name :name ,
96
+ dance_type :{ [ DanceTypeEnum . Standalone ] :null } ,
97
+ body :{ [ RequestBodyEnum . None ] : null } ,
98
+ staging_area :this . staging_area
99
+ }
100
+ return this . callzome ( dro )
101
+ }
102
+
103
+ /* create one using the stage request with no parameters or properties */
104
+ public async createOneEmpty ( name :string ) :Promise < DanceResponse > {
105
+ const dro :DanceRequestObject = {
106
+ dance_name :name ,
107
+ dance_type :{ [ DanceTypeEnum . Standalone ] :null } ,
108
+ body :{ [ RequestBodyEnum . None ] : null } ,
109
+ staging_area :this . staging_area
110
+ }
111
+ return this . callzome ( dro )
112
+ }
113
+
114
+ /* create one using the stage request with properties */
115
+ public async createOne ( name :string , data :Holon ) :Promise < DanceResponse > {
116
+ const dro :DanceRequestObject = {
117
+ dance_name :name ,
118
+ dance_type :{ [ DanceTypeEnum . Standalone ] :null } ,
119
+ body :{ [ RequestBodyEnum . Holon ] : data } ,
120
+ staging_area :this . staging_area
121
+ }
122
+ return this . callzome ( dro )
123
+ }
124
+
125
+ /// update an existing object by index with properties
126
+ public async updateOneWithProperties ( name :string , index :number , properties :PropertyMap ) :Promise < DanceResponse > {
127
+ const dro :DanceRequestObject = {
128
+ dance_name :name ,
129
+ dance_type :{ [ DanceTypeEnum . CommandMethod ] :index } ,
130
+ body :{ [ RequestBodyEnum . ParameterValues ] : properties } ,
131
+ staging_area :this . staging_area
132
+ }
133
+ return this . callzome ( dro )
134
+ }
135
+
136
+ // maybe this doesnt need any string variations?
137
+ public async commit ( name :string ) {
138
+ const dro :DanceRequestObject = {
139
+ dance_name :name ,
140
+ dance_type :{ [ DanceTypeEnum . Standalone ] :null } ,
141
+ body :{ [ RequestBodyEnum . None ] : null } ,
142
+ staging_area :this . staging_area
143
+ }
144
+ return this . callzome ( dro )
145
+ }
146
+
73
147
}
74
148
0 commit comments