Compare commits
5
Commits
spark_crypto.dev
...
rm
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ea4e599ac6 | ||
|
|
fd2ba70031 | ||
|
|
ab410c339f | ||
|
|
9e3f16d8bc | ||
|
|
a3f194d708 |
No files matched your search
@@ -7,6 +7,24 @@
|
||||
"commands": [
|
||||
"dotnet-format"
|
||||
]
|
||||
},
|
||||
"fable": {
|
||||
"version": "4.0.0-theta-018",
|
||||
"commands": [
|
||||
"fable"
|
||||
]
|
||||
},
|
||||
"fantomas": {
|
||||
"version": "5.2.2",
|
||||
"commands": [
|
||||
"fantomas"
|
||||
]
|
||||
},
|
||||
"fake-cli": {
|
||||
"version": "6.0.0",
|
||||
"commands": [
|
||||
"fake"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
Submodule externals updated: 4d96613ca8...4a3e40193e.
@@ -63,9 +63,9 @@ namespace mbts.spark {
|
||||
vs_input, vs_nonvol_data.contracts, aux_data_map);
|
||||
_timer.stop();
|
||||
var tag_str = tag == null ? "Null" : tag.ToString();
|
||||
bts.Log.Gen.info($"SingleVolSurfaceCommittedOutputRetriever._recompute_and_publish " +
|
||||
$"vs_id: {_vs_id} time:{_timer.lastIntervalTime} ms tag:{tag_str} " +
|
||||
$"tid:{_tid()}"); //output: {vs_output.log_string()}*/");
|
||||
// bts.Log.Gen.info($"SingleVolSurfaceCommittedOutputRetriever._recompute_and_publish " +
|
||||
// $"vs_id: {_vs_id} time:{_timer.lastIntervalTime} ms tag:{tag_str} " +
|
||||
// $"tid:{_tid()}"); //output: {vs_output.log_string()}*/");
|
||||
_logger.log(_log_id, _log_id, _timer.lastIntervalTime);
|
||||
_bb.post(_out_bb_computed_vol_tag, vs_output);
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ namespace mbts.spark {
|
||||
var exp_price_map = OptionDriverPriceMap.get_vs_price_map(
|
||||
all_sym_price_map, (s) => _option_symbols.Contains(s));
|
||||
if (sc_data != null && vs_nonvol_input != null && exp_price_map != null) {
|
||||
bts.Log.Gen.info($"SingleVolSurfaceNonVolDataSource vs_id:{_vs_id} " +
|
||||
bts.Log.Gen.diag($"SingleVolSurfaceNonVolDataSource vs_id:{_vs_id} " +
|
||||
"publishing VolSurfaceNonVolData");
|
||||
_bb.post(_out_bb_vs_nonvol_data_tag,
|
||||
new VolSurfaceNonVolData(
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace mbts.analytics {
|
||||
output.Add(symbol, symbol_data);
|
||||
}
|
||||
IReadOnlyDictionary<string, TData> ro_output = output;
|
||||
bts.Log.Gen.info($"SymbolAggregationPublisher._on_timer publishing " +
|
||||
bts.Log.Gen.diag($"SymbolAggregationPublisher._on_timer publishing " +
|
||||
$"tag: {_out_tag} sz: {ro_output.Count}");
|
||||
_bb.post(_out_tag, ro_output);
|
||||
}
|
||||
|
||||
@@ -28,9 +28,10 @@ namespace mbts.spark {
|
||||
_candidate_value.Changed += on_candidate_changed;
|
||||
_is_dirty.Changed += (o, n) => {
|
||||
Log.assert(o != n);
|
||||
Log.Ui.info(
|
||||
$"VolSurface '{expiration}.{column}' is_dirty changed to {n}. " +
|
||||
$"commited: {committed_value}; candidate: {candidate_value}");
|
||||
// TODO: John, this was logged too many times
|
||||
// Log.Ui.info(
|
||||
// $"VolSurface '{expiration}.{column}' is_dirty changed to {n}. " +
|
||||
// $"commited: {committed_value}; candidate: {candidate_value}");
|
||||
};
|
||||
|
||||
void on_committed_changed(object? oldval, object? newval) =>
|
||||
|
||||
@@ -88,8 +88,8 @@ namespace mbts.analytics {
|
||||
|
||||
public void set_driver_price(
|
||||
IDictionary<VolSurfaceExpiration, double> driver_price_map) {
|
||||
Log.Gen.info($"VolSurfaceInterpGreeksProducer.set_driver_price " +
|
||||
$"vs_id: {_vs_id} exp_count: {driver_price_map.Count}");
|
||||
// Log.Gen.info($"VolSurfaceInterpGreeksProducer.set_driver_price " +
|
||||
// $"vs_id: {_vs_id} exp_count: {driver_price_map.Count}");
|
||||
_driver_price_map = new Dictionary<VolSurfaceExpiration, double>(driver_price_map);
|
||||
_compute_and_fire(InputType.DriverPrice);
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ namespace bts {
|
||||
}
|
||||
|
||||
private void _on_server_sec_map(IReadOnlyDictionary<uint, SecurityMD> sec_map) {
|
||||
_log_options(sec_map);
|
||||
//_log_options(sec_map);
|
||||
bts.Log.Gen.info(String.Format("MergedMDDaemon._on_server_sec_map sz: {0}", sec_map.Count()));
|
||||
_server_sec_map = new Dictionary<uint, SecurityMD>(sec_map);
|
||||
_merge_and_post();
|
||||
|
||||
@@ -58,5 +58,10 @@ namespace BCG {
|
||||
public static UInt32 get_ask_size(BBOPacket md) {
|
||||
return md != null ? md._ask_size : (UInt32)0;
|
||||
}
|
||||
public static Tuple<double, UInt32> get_md(BBOPacket md, bool is_bid) {
|
||||
double price = is_bid ? BBOPacket.get_bid_price(md) : BBOPacket.get_ask_price(md);
|
||||
UInt32 sz = is_bid ? BBOPacket.get_bid_size(md) : BBOPacket.get_ask_size(md);
|
||||
return Tuple.Create(price, sz);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -123,6 +123,15 @@ namespace BCG {
|
||||
|
||||
#endregion
|
||||
|
||||
#region Orders
|
||||
[System.ComponentModel.Category("Orders / Algo")]
|
||||
[System.ComponentModel.DisplayName("Default Account")]
|
||||
public string Account { get; set; }
|
||||
[System.ComponentModel.Category("Orders / Algo")]
|
||||
[System.ComponentModel.DisplayName("Default Qty")]
|
||||
public Nullable<double> DefaultQty { get; set; }
|
||||
#endregion
|
||||
|
||||
public NMSheetSettingLayout() {
|
||||
show_settings_header = false;
|
||||
show_exp_navigator = false;
|
||||
|
||||
@@ -18,6 +18,7 @@ using mbts.spark.filters;
|
||||
using System.Collections;
|
||||
using System.Reactive.Linq;
|
||||
using System.Threading;
|
||||
using bts.api.orderman;
|
||||
|
||||
namespace BCG {
|
||||
public partial class NMSheetControl : UserControl {
|
||||
@@ -555,6 +556,17 @@ namespace BCG {
|
||||
}
|
||||
private void _launch_order_entry_window(NMSheetTheoGrid.GridCell cell,
|
||||
OrderEntryWindow window_type) {
|
||||
Func<string, bts.AccountTuple> get_account = (string default_acc) => {
|
||||
string account = _settings.setting_layout.Account;
|
||||
if (String.IsNullOrEmpty(account)) {
|
||||
account = default_acc;
|
||||
}
|
||||
Nullable<uint> id = _get_account_id(account);
|
||||
if (!id.HasValue) {
|
||||
id = 0;
|
||||
}
|
||||
return new bts.AccountTuple(id.Value, account);
|
||||
};
|
||||
uint key;
|
||||
var found = _sheet_data.get_security_key(cell.expiration,
|
||||
cell.strike, cell.call_selected, out key);
|
||||
@@ -566,7 +578,20 @@ namespace BCG {
|
||||
if (sc_data.sec_md_map.TryGetValue(key, out var smd)) {
|
||||
switch (window_type) {
|
||||
case OrderEntryWindow.Ticket:
|
||||
_threaded_bb.post(SparkTags.ShowOrderTicketFromSecurityTag, smd);
|
||||
bool is_bid = NMSheetSettingColumnOrganization.get_column_info(cell.col).is_bid;
|
||||
bts.AccountTuple acc_tup = get_account("SMALL");
|
||||
Nullable<double> qty = _settings.setting_layout.DefaultQty;
|
||||
OrderDefinition od = new OrderDefinition() {
|
||||
SecurityKey = smd.id,
|
||||
TimeInForce = TimeInForce.Gtc,
|
||||
Account = acc_tup.name,
|
||||
AccountId = acc_tup.id
|
||||
};
|
||||
BBOPacket bbo = _sheet_data.get_bbo(smd.id);
|
||||
Tuple<double, UInt32> pr_sz = BBOPacket.get_md(bbo, is_bid);
|
||||
UInt32 effective_qty = qty.HasValue ? Convert.ToUInt32(Math.Abs(qty.Value)) : pr_sz.Item2;
|
||||
_threaded_bb.post(SparkTags.ShowOrderTicketTag,
|
||||
(new OrderDefinitionImmutable(od), pr_sz.Item1, effective_qty));
|
||||
break;
|
||||
case OrderEntryWindow.Ladder:
|
||||
_threaded_bb.post(SparkTags.ShowLadderTag, smd);
|
||||
|
||||
@@ -121,7 +121,7 @@ namespace mbts.analytics {
|
||||
timer.stop();
|
||||
Log.Ui.info($"PNLReportCalculator n_pos: {output.position_data.Count()} " +
|
||||
$"n_day_trades: {output.day_trades.Count()} time(msecs): {timer.lastIntervalTime}");
|
||||
_log_before_posting(output.position_data);
|
||||
//_log_before_posting(output.position_data);
|
||||
_bus.post(SparkTags.ReportBlackboardTags.PNL.PNLData, output);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -115,21 +115,21 @@ namespace mbts.analytics {
|
||||
}
|
||||
|
||||
private void _handle_nonvol_data(VolSurfaceNonVolData vs_nonvol_data) {
|
||||
bts.Log.Gen.info(String.Format("SlideReportCalculator._handle_nonvol_data report {0}",
|
||||
_report.ReportName));
|
||||
// bts.Log.Gen.info(String.Format("SlideReportCalculator._handle_nonvol_data report {0}",
|
||||
// _report.ReportName));
|
||||
_vs_nonvol_data = vs_nonvol_data;
|
||||
}
|
||||
|
||||
private void _handle_future_prices(
|
||||
IReadOnlyDictionary<SecurityExpiration, FutureTheoStructure> future_prices_map) {
|
||||
bts.Log.Gen.info(String.Format("SlideReportCalculator._handle_future_prices report {0}",
|
||||
_report.ReportName));
|
||||
// bts.Log.Gen.Diag(String.Format("SlideReportCalculator._handle_future_prices report {0}",
|
||||
// _report.ReportName));
|
||||
_future_prices_map = future_prices_map.ToDictionary(kv => kv.Key, kv => kv.Value.theo);
|
||||
}
|
||||
|
||||
private void _handle_trades(IEnumerable<ITradeLogRow> trades) {
|
||||
bts.Log.Gen.info(String.Format("SlideReportCalculator._handle_trades report {0}",
|
||||
_report.ReportName));
|
||||
// bts.Log.Gen.info(String.Format("SlideReportCalculator._handle_trades report {0}",
|
||||
// _report.ReportName));
|
||||
_all_trades = trades.Where(t => t.is_active);
|
||||
if (_report.CalcMode == Report.Types.ReportCalculationMode.PositionOrTheoChange) {
|
||||
_compute_dirty = true;
|
||||
|
||||
@@ -35,7 +35,7 @@ namespace bts.core {
|
||||
// TODO: for debugging purposes, remove it later
|
||||
if (tag != mbts.spark.SparkTags.SparkTimer) {
|
||||
var tid = System.Threading.Thread.CurrentThread.ManagedThreadId;
|
||||
bts.Log.Ui.diag($"SimpleBus.post tag:{tag} tid:{tid}");
|
||||
//bts.Log.Ui.diag($"SimpleBus.post tag:{tag} tid:{tid}");
|
||||
return;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
@@ -45,7 +45,7 @@ namespace bts.core {
|
||||
|
||||
public IObservable<T> subscribe<T>(ITag<T> tag) {
|
||||
var tid = System.Threading.Thread.CurrentThread.ManagedThreadId;
|
||||
bts.Log.Ui.info($"SimpleBus.post tag:{tag} tid:{tid}");
|
||||
//bts.Log.Ui.info($"SimpleBus.subscribe tag:{tag} tid:{tid}");
|
||||
return subject<T>(tag);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ def to_type_model(field, msg):
|
||||
elif field.type == types.TYPE_DOUBLE: return TypeModel("double", islist, "double?", jstype='number')
|
||||
elif field.type == types.TYPE_FLOAT: return TypeModel("float", islist, "float?", jstype='number', fstype='float32')
|
||||
elif field.type == types.TYPE_STRING: return TypeModel("string", islist, cpptype="std::string")
|
||||
elif field.type == types.TYPE_BYTES: return TypeModel("ByteString", islist, cpptype="std::string", jstype='Uint8Array', fstype='Fable.Import.JS.Uint8Array')
|
||||
elif field.type == types.TYPE_BYTES: return TypeModel("ByteString", islist, cpptype="std::string", jstype='Uint8Array', fstype='Fable.Core.JS.Uint8Array')
|
||||
elif field.type == types.TYPE_BOOL: return TypeModel("bool", islist, "bool?", jstype='boolean', natural_key=True)
|
||||
elif field.type == types.TYPE_ENUM:
|
||||
nested_enums = [x.name for x in msg.enum_type]
|
||||
|
||||
Generated
+2409
-1369
File diff suppressed because it is too large.
Load diff
@@ -1,23 +1,23 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"protobufjs": "^6.11.3",
|
||||
"tslib": "^2.4.0",
|
||||
"protobufjs": "^7.2.2",
|
||||
"tslib": "^2.5.0",
|
||||
"watch": "^1.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"jest": "^28.1.1",
|
||||
"ts-jest": "^28.0.4",
|
||||
"jest": "^29.4.3",
|
||||
"protobufjs-cli": "^1.1.1",
|
||||
"ts-jest": "^29.0.5",
|
||||
"ts2fable": "^0.7.1",
|
||||
"tsutils": "^3.21.0",
|
||||
"typescript": "^4.7.3",
|
||||
"ws": "^8.7.0"
|
||||
"typescript": "^4.9.5",
|
||||
"ws": "^8.12.1"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "tsc -p tsconfig.release.json",
|
||||
"watch": "tsc -w -p tsconfig.release.json",
|
||||
"protogen": "pbjs -t json-module -w commonjs -o %build%/proto.js ../../lib/api/*.proto ../../lib/api/services/*.proto ../../lib/domain_model/*.proto ../../lib/sparkproto/*.proto ../../lib/md/protos/*.proto",
|
||||
"test": "jest",
|
||||
"test:watch": "jest --watch",
|
||||
"fable": "ts2fable %build%/ServiceContext.d.ts %build%/ServiceContext.fs && ts2fable %build%/HelloService.d.ts %build%/HelloService.fs"
|
||||
"test:watch": "jest --watch"
|
||||
}
|
||||
}
|
||||
Generated
+2833
-3529
File diff suppressed because it is too large.
Load diff
+18
-21
@@ -8,37 +8,34 @@
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@babel/plugin-transform-runtime": "^7.18.2",
|
||||
"@babel/preset-env": "^7.18.2",
|
||||
"@babel/runtime": "^7.18.3",
|
||||
"babel-loader": "^8.2.5",
|
||||
"fable-loader": "^2.1.9",
|
||||
"@babel/plugin-transform-runtime": "^7.21.0",
|
||||
"@babel/preset-env": "^7.20.2",
|
||||
"@babel/runtime": "^7.21.0",
|
||||
"babel-loader": "^9.1.2",
|
||||
"fable-utils": "^1.2.0",
|
||||
"node-sass": "^7.0.1",
|
||||
"protobufjs": "^6.11.3",
|
||||
"react": "^18.1.0",
|
||||
"react-dom": "^18.1.0",
|
||||
"node-sass": "^8.0.0",
|
||||
"protobufjs": "^7.2.2",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"remotedev": "^0.2.9",
|
||||
"ts2fable": "^0.7.1",
|
||||
"webpack": "^5.73.0"
|
||||
"webpack": "^5.75.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.18.2",
|
||||
"@babel/core": "^7.21.0",
|
||||
"@fortawesome/fontawesome-free": "^5.15.4",
|
||||
"bulma": "^0.9.4",
|
||||
"copy-webpack-plugin": "^11.0.0",
|
||||
"core-js": "^3.22.8",
|
||||
"css-loader": "^6.7.1",
|
||||
"fable-compiler": "^2.13.0",
|
||||
"file-loader": "^6.2.0",
|
||||
"core-js": "^3.28.0",
|
||||
"css-loader": "^6.7.3",
|
||||
"html-webpack-plugin": "^5.5.0",
|
||||
"mini-css-extract-plugin": "^2.6.0",
|
||||
"mini-css-extract-plugin": "^2.7.2",
|
||||
"npx": "^10.2.2",
|
||||
"sass": "^1.52.3",
|
||||
"sass-loader": "^13.0.0",
|
||||
"sass": "^1.58.3",
|
||||
"sass-loader": "^13.2.0",
|
||||
"style-loader": "^3.3.1",
|
||||
"tslib": "^2.4.0",
|
||||
"webpack-cli": "^4.10.0",
|
||||
"webpack-dev-server": "^4.9.2"
|
||||
"tslib": "^2.5.0",
|
||||
"webpack-cli": "^5.0.1",
|
||||
"webpack-dev-server": "^4.11.1"
|
||||
}
|
||||
}
|
||||
@@ -170,8 +170,8 @@ let marginSub model dispatch =
|
||||
|
||||
let selectSub (tab:Tab option) model =
|
||||
match tab, model.tab with
|
||||
| Some PositionManagementTab, _ | None, PositionManagementTab -> Cmd.ofSub (positionSub model)
|
||||
| Some MarginTab, _ | None, MarginTab -> Cmd.ofMsg GetMarginData //Cmd.ofSub (marginSub model)
|
||||
| Some PositionManagementTab, _ | None, PositionManagementTab -> Cmd.ofEffect (positionSub model)
|
||||
| Some MarginTab, _ | None, MarginTab -> Cmd.ofMsg GetMarginData //Cmd.ofEffect (marginSub model)
|
||||
| _ ->
|
||||
match model.unsub with
|
||||
| Some (unsub) -> unsub.Dispose()
|
||||
|
||||
@@ -1225,7 +1225,7 @@ let accountSelectionGrid (accountList:BTSAccount list) (currentAccount:BTSAccoun
|
||||
onClick = None
|
||||
}
|
||||
]
|
||||
div[] [
|
||||
div [] [
|
||||
TableControl.createSelectorTable (Some headerRow) rws
|
||||
]
|
||||
|
||||
@@ -1265,7 +1265,7 @@ let menuItem account selectedAccount model dispatch =
|
||||
]
|
||||
]
|
||||
]
|
||||
else span[][])
|
||||
else span [] [])
|
||||
]
|
||||
|
||||
let NavRoot (accounts:BTSAccount[]) selectedAccount model dispatch =
|
||||
@@ -1312,7 +1312,7 @@ let root (model:Model) dispatch =
|
||||
| "" -> span [] []
|
||||
| _ -> Modal.showConfirm (fst model.ConfirmModal) (fun () -> (snd model.ConfirmModal) |> dispatch) (fun _ -> OpenConfirmModal ("", Msg.SelectTab model.tab ) |> dispatch)
|
||||
match model.adminData with
|
||||
| None -> div[][str "Loading account list..."]
|
||||
| None -> div [] [str "Loading account list..."]
|
||||
| Some data ->
|
||||
div
|
||||
[ Class "columns is-fullheight"
|
||||
|
||||
@@ -7,10 +7,6 @@ open Types
|
||||
open App.State
|
||||
open App.Types
|
||||
open Global
|
||||
open Fable.Core.JsInterop
|
||||
open Types
|
||||
open App.State
|
||||
open Global
|
||||
|
||||
importAll "../sass/main.scss"
|
||||
|
||||
|
||||
@@ -146,8 +146,8 @@ let buttonColumn action header icon misc =
|
||||
rowIdx = 0;
|
||||
misc = misc;
|
||||
}
|
||||
[ Fable.React.Props.HTMLAttr.Name header
|
||||
Fable.React.Props.HTMLAttr.Style [ Fable.React.Props.CSSProp.Width 60 ]
|
||||
[ HTMLAttr.Name header
|
||||
Style [ Fable.React.Props.CSSProp.Width 60 ]
|
||||
]
|
||||
|
||||
// [ Name header
|
||||
|
||||
@@ -6,7 +6,6 @@ open System
|
||||
open System.Runtime.InteropServices
|
||||
open Fable.Core
|
||||
open Fable.Core.JsInterop
|
||||
open System.Xml
|
||||
open bts.api.admin
|
||||
open Global
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@ let generalTabView (model:Model) (dispatch:Msg->Unit) (readonly: bool)=
|
||||
Fields.text "Company" model.scratchUser.company [Disabled readonly] (Company >> UpdateField >> dispatch)
|
||||
Fields.checkbox "Can Login?" "Unchecking this stops the user from logging into Spark" model.scratchUser.isActive [Disabled can_login_disabled] (IsActive >> UpdateField >> dispatch)
|
||||
Fields.checkbox "Can Create?" "Checking this allows the user to create other users and accounts" model.scratchUser.canCreate [Disabled (readonly || not can_create)] (CanCreate >> UpdateField >> dispatch)
|
||||
(if (State.isNewUser model.scratchUser) then modal else span[][])
|
||||
(if (State.isNewUser model.scratchUser) then modal else span [] [])
|
||||
]
|
||||
|
||||
let accountNameLookup (accountsList:BTSAccount list) (id:string) =
|
||||
@@ -334,7 +334,7 @@ let tabContent (model:Model) (dispatch:Msg->Unit) display_md display_risk =
|
||||
| Tab.MarketData, true -> MarketDataTabView model dispatch (not display_md)
|
||||
| Tab.OrderRouting, true -> orderRoutingTabView model dispatch (not display_risk) )
|
||||
|
||||
(if (State.userIsSelected model.scratchUser State.defaultScratchUser) then userControls model dispatch else span[][])
|
||||
(if (State.userIsSelected model.scratchUser State.defaultScratchUser) then userControls model dispatch else span [] [])
|
||||
]
|
||||
|
||||
let usersMenu (usersList:BTSUser list) (currentUser:BTSUser) (dispatch:Msg->Unit) =
|
||||
@@ -395,7 +395,7 @@ let userSelectionGrid (usersList:BTSUser list) (currentUser:BTSUser) (dispatch:M
|
||||
onClick = None
|
||||
}
|
||||
]
|
||||
div[][
|
||||
div [] [
|
||||
TableControl.createSelectorTable (Some headerRow) rws
|
||||
]
|
||||
|
||||
@@ -444,7 +444,7 @@ let menuItem (user:BTSUser) (selectedUser:BTSUser) model dispatch =
|
||||
]
|
||||
]
|
||||
else
|
||||
span[][])
|
||||
span [] [])
|
||||
]
|
||||
|
||||
let NavRoot (usersList:BTSUser list) (currentUser:BTSUser) model (dispatch:Msg->Unit) =
|
||||
@@ -496,7 +496,7 @@ let root (model:Model) (dispatch:Msg->Unit) =
|
||||
| "" -> span [] []
|
||||
| _ -> Modal.showConfirm (fst model.ConfirmModal) (fun () -> (snd model.ConfirmModal) |> dispatch) (fun _ -> OpenConfirmModal ("", Msg.SwitchTab model.currentTab ) |> dispatch)
|
||||
(match model.adminData with
|
||||
| None -> div[][str "Loading user list..."]
|
||||
| None -> div [] [str "Loading user list..."]
|
||||
| Some data ->
|
||||
div
|
||||
[ Class "columns is-fullheight"
|
||||
|
||||
@@ -0,0 +1,486 @@
|
||||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v7.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v7.0": {
|
||||
"ui/1.0.0": {
|
||||
"dependencies": {
|
||||
"Elmish": "4.0.1",
|
||||
"Elmish.Navigation": "1.0.0",
|
||||
"Fable.Core": "4.0.0-theta-007",
|
||||
"Fable.Elmish": "4.0.1",
|
||||
"Fable.Elmish.Browser": "4.0.1",
|
||||
"Fable.Elmish.Debugger": "4.0.0",
|
||||
"Fable.Elmish.HMR": "7.0.0",
|
||||
"Fable.Elmish.React": "4.0.0",
|
||||
"Fable.Elmish.UrlParser": "1.0.1",
|
||||
"Fable.Promise": "3.2.0",
|
||||
"Fable.React": "9.2.0",
|
||||
"System.Runtime": "4.3.1"
|
||||
},
|
||||
"runtime": {
|
||||
"ui.dll": {}
|
||||
}
|
||||
},
|
||||
"Elmish/4.0.1": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Elmish.dll": {
|
||||
"assemblyVersion": "4.0.1.0",
|
||||
"fileVersion": "4.0.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Elmish.Navigation/1.0.0": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.Elmish": "4.0.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net5.0/Elmish.Navigation.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.Browser.Blob/1.2.0": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.Core": "4.0.0-theta-007"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Browser.Blob.dll": {
|
||||
"assemblyVersion": "1.2.0.0",
|
||||
"fileVersion": "1.2.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.Browser.Dom/2.10.1": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.Browser.Blob": "1.2.0",
|
||||
"Fable.Browser.Event": "1.5.0",
|
||||
"Fable.Browser.WebStorage": "1.1.0",
|
||||
"Fable.Core": "4.0.0-theta-007"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Browser.Dom.dll": {
|
||||
"assemblyVersion": "2.10.1.0",
|
||||
"fileVersion": "2.10.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.Browser.Event/1.5.0": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.Browser.Gamepad": "1.1.0",
|
||||
"Fable.Core": "4.0.0-theta-007"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Browser.Event.dll": {
|
||||
"assemblyVersion": "1.5.0.0",
|
||||
"fileVersion": "1.5.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.Browser.Gamepad/1.1.0": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.Core": "4.0.0-theta-007"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Browser.Gamepad.dll": {
|
||||
"assemblyVersion": "1.1.0.0",
|
||||
"fileVersion": "1.1.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.Browser.WebStorage/1.1.0": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.Browser.Event": "1.5.0",
|
||||
"Fable.Core": "4.0.0-theta-007"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Browser.WebStorage.dll": {
|
||||
"assemblyVersion": "1.1.0.0",
|
||||
"fileVersion": "1.1.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.Core/4.0.0-theta-007": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Fable.Core.dll": {
|
||||
"assemblyVersion": "4.0.0.0",
|
||||
"fileVersion": "4.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.Elmish/4.0.1": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.Core": "4.0.0-theta-007"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Fable.Elmish.dll": {
|
||||
"assemblyVersion": "4.0.1.0",
|
||||
"fileVersion": "4.0.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.Elmish.Browser/4.0.1": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.Browser.Dom": "2.10.1",
|
||||
"Fable.Elmish": "4.0.1",
|
||||
"Fable.Elmish.UrlParser": "1.0.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Fable.Elmish.Browser.dll": {
|
||||
"assemblyVersion": "4.0.1.0",
|
||||
"fileVersion": "4.0.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.Elmish.Debugger/4.0.0": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.Elmish": "4.0.1",
|
||||
"Thoth.Json": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Fable.Elmish.Debugger.dll": {
|
||||
"assemblyVersion": "4.0.0.0",
|
||||
"fileVersion": "4.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.Elmish.HMR/7.0.0": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.Core": "4.0.0-theta-007",
|
||||
"Fable.Elmish.React": "4.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Fable.Elmish.HMR.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "7.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.Elmish.React/4.0.0": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.Elmish": "4.0.1",
|
||||
"Fable.ReactDom.Types": "18.2.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Fable.Elmish.React.dll": {
|
||||
"assemblyVersion": "4.0.0.0",
|
||||
"fileVersion": "4.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.Elmish.UrlParser/1.0.1": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Fable.Elmish.UrlParser.dll": {
|
||||
"assemblyVersion": "1.0.1.0",
|
||||
"fileVersion": "1.0.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.Promise/3.2.0": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.Core": "4.0.0-theta-007"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Fable.Promise.dll": {
|
||||
"assemblyVersion": "3.2.0.0",
|
||||
"fileVersion": "3.2.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.React/9.2.0": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.React.Types": "18.3.0",
|
||||
"Fable.ReactDom.Types": "18.2.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Fable.React.dll": {
|
||||
"assemblyVersion": "9.2.0.0",
|
||||
"fileVersion": "9.2.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.React.Types/18.3.0": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.Browser.Dom": "2.10.1",
|
||||
"Fable.Core": "4.0.0-theta-007"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Fable.React.Types.dll": {
|
||||
"assemblyVersion": "18.3.0.0",
|
||||
"fileVersion": "18.3.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fable.ReactDom.Types/18.2.0": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.React.Types": "18.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Fable.ReactDom.Types.dll": {
|
||||
"assemblyVersion": "18.2.0.0",
|
||||
"fileVersion": "18.2.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"FSharp.Core/6.0.7": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/FSharp.Core.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.722.51308"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"lib/netstandard2.1/cs/FSharp.Core.resources.dll": {
|
||||
"locale": "cs"
|
||||
},
|
||||
"lib/netstandard2.1/de/FSharp.Core.resources.dll": {
|
||||
"locale": "de"
|
||||
},
|
||||
"lib/netstandard2.1/es/FSharp.Core.resources.dll": {
|
||||
"locale": "es"
|
||||
},
|
||||
"lib/netstandard2.1/fr/FSharp.Core.resources.dll": {
|
||||
"locale": "fr"
|
||||
},
|
||||
"lib/netstandard2.1/it/FSharp.Core.resources.dll": {
|
||||
"locale": "it"
|
||||
},
|
||||
"lib/netstandard2.1/ja/FSharp.Core.resources.dll": {
|
||||
"locale": "ja"
|
||||
},
|
||||
"lib/netstandard2.1/ko/FSharp.Core.resources.dll": {
|
||||
"locale": "ko"
|
||||
},
|
||||
"lib/netstandard2.1/pl/FSharp.Core.resources.dll": {
|
||||
"locale": "pl"
|
||||
},
|
||||
"lib/netstandard2.1/pt-BR/FSharp.Core.resources.dll": {
|
||||
"locale": "pt-BR"
|
||||
},
|
||||
"lib/netstandard2.1/ru/FSharp.Core.resources.dll": {
|
||||
"locale": "ru"
|
||||
},
|
||||
"lib/netstandard2.1/tr/FSharp.Core.resources.dll": {
|
||||
"locale": "tr"
|
||||
},
|
||||
"lib/netstandard2.1/zh-Hans/FSharp.Core.resources.dll": {
|
||||
"locale": "zh-Hans"
|
||||
},
|
||||
"lib/netstandard2.1/zh-Hant/FSharp.Core.resources.dll": {
|
||||
"locale": "zh-Hant"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.NETCore.Platforms/1.1.1": {},
|
||||
"Microsoft.NETCore.Targets/1.1.3": {},
|
||||
"System.Runtime/4.3.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "1.1.1",
|
||||
"Microsoft.NETCore.Targets": "1.1.3"
|
||||
}
|
||||
},
|
||||
"Thoth.Json/6.0.0": {
|
||||
"dependencies": {
|
||||
"FSharp.Core": "6.0.7",
|
||||
"Fable.Core": "4.0.0-theta-007"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Thoth.Json.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.0.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"ui/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Elmish/4.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-6AI++9Ula33yMUG9F83iVrZClurQn5cgriwK7aX9FvlhJFXgRB6IYybD+wx26NNhdPOKQIvfBYZYWwRWWWqJmA==",
|
||||
"path": "elmish/4.0.1",
|
||||
"hashPath": "elmish.4.0.1.nupkg.sha512"
|
||||
},
|
||||
"Elmish.Navigation/1.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-0+CYaZzb988Oi02KeXPTUf0HTi1NXgFXTZ5/OROU22GKAohZe519QK3Be+jkbT0hvQq5EEiJJjPfp3FAgpqDaA==",
|
||||
"path": "elmish.navigation/1.0.0",
|
||||
"hashPath": "elmish.navigation.1.0.0.nupkg.sha512"
|
||||
},
|
||||
"Fable.Browser.Blob/1.2.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-bM4zbtIeycTFFCH7o4WuN28W70dTxNTMZiMvR70XUTYrBnbz7GpS5XxzUy5caDB4l7s2l7wiuVDhh52t7NXxDg==",
|
||||
"path": "fable.browser.blob/1.2.0",
|
||||
"hashPath": "fable.browser.blob.1.2.0.nupkg.sha512"
|
||||
},
|
||||
"Fable.Browser.Dom/2.10.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-G1Ul9D3suwBPUxEw0hwclZzDxDk/hLkwAZytgAoxHmv4uGth9Zpi9Fz4gm6C8v6W87qvhcM8lrCpg1awPeATyg==",
|
||||
"path": "fable.browser.dom/2.10.1",
|
||||
"hashPath": "fable.browser.dom.2.10.1.nupkg.sha512"
|
||||
},
|
||||
"Fable.Browser.Event/1.5.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-Bx2AOOASIG1Eq1Pe8869H8baMePte6STmKGccGuOYMT2p6nWVS8G6ZBZb5encQ0tAL2/0vhA4KJOl4bYwUaQqg==",
|
||||
"path": "fable.browser.event/1.5.0",
|
||||
"hashPath": "fable.browser.event.1.5.0.nupkg.sha512"
|
||||
},
|
||||
"Fable.Browser.Gamepad/1.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-8m/Ae/mrH2Hb2ue435rTPEeVb2FhfWsRJJLpCxMvk+5EUOO2+IIjIkLq4thUfRL98uQVt9V5cQd14h2aBf2XJA==",
|
||||
"path": "fable.browser.gamepad/1.1.0",
|
||||
"hashPath": "fable.browser.gamepad.1.1.0.nupkg.sha512"
|
||||
},
|
||||
"Fable.Browser.WebStorage/1.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-tGktTk6QHIOeX7JtG5ISem1p9Rc1iYkgcbpIEzHS2YuvpOa9YomUKABU0Lraz4GMjAGxhhNvAXLRry2w89HdVQ==",
|
||||
"path": "fable.browser.webstorage/1.1.0",
|
||||
"hashPath": "fable.browser.webstorage.1.1.0.nupkg.sha512"
|
||||
},
|
||||
"Fable.Core/4.0.0-theta-007": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-9nDQRQfhz6/NjoXLBMqixCjRYvx8jgHAuGjJow4W0vHoFWNauPhTex+psQsw9FRRuQF2AhIwuhHoh9Tb8JoCfw==",
|
||||
"path": "fable.core/4.0.0-theta-007",
|
||||
"hashPath": "fable.core.4.0.0-theta-007.nupkg.sha512"
|
||||
},
|
||||
"Fable.Elmish/4.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-BtsXTur95XkWmZaXwIoqfUk8puWpiwgJK8YMTg62C/FYxMl8Z6WM4yuGAjQ6rVpKWw5Ha47VfmOL6k/znK3msw==",
|
||||
"path": "fable.elmish/4.0.1",
|
||||
"hashPath": "fable.elmish.4.0.1.nupkg.sha512"
|
||||
},
|
||||
"Fable.Elmish.Browser/4.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-XqTMh3TzkyuWmKXOoNAHRDjxcnCAiDkUMIZZX6tkxoHPhtruxnOG5zniOm7K/RZD+NGbreKi82pPswcvmjw6/w==",
|
||||
"path": "fable.elmish.browser/4.0.1",
|
||||
"hashPath": "fable.elmish.browser.4.0.1.nupkg.sha512"
|
||||
},
|
||||
"Fable.Elmish.Debugger/4.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-a1gABGh8L6kkzGDeVJP6VJtcimfSi/l3Xaa1lzuMlnzb3oXgtfmzXfx1DV/dtDVujIujueCOsA+JmiBh/2HB7A==",
|
||||
"path": "fable.elmish.debugger/4.0.0",
|
||||
"hashPath": "fable.elmish.debugger.4.0.0.nupkg.sha512"
|
||||
},
|
||||
"Fable.Elmish.HMR/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-4A3u0H3wdmF00UBFJGJK6jlRxzEgkYOegDj2bgVzYTD1L17+0mCy9+QqAYJMuOGtA2klrKAHcU43tYdm0o2Fnw==",
|
||||
"path": "fable.elmish.hmr/7.0.0",
|
||||
"hashPath": "fable.elmish.hmr.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Fable.Elmish.React/4.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-cMuWet7DhxgN2G1caYLwjLvoMkH1u75U36cUyL07yxNt/dmGp8GD/+RTtL9wpkfeThfeJHHouCkR708mJcMRpA==",
|
||||
"path": "fable.elmish.react/4.0.0",
|
||||
"hashPath": "fable.elmish.react.4.0.0.nupkg.sha512"
|
||||
},
|
||||
"Fable.Elmish.UrlParser/1.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-Jpw1TPR3YsEeLHF0HMoeHKMYzTgjH+gslq8kNa3/d68GIK09eDpASNzA1gu9YLJkRYy5iUXvvvYtHUOKh+mzEw==",
|
||||
"path": "fable.elmish.urlparser/1.0.1",
|
||||
"hashPath": "fable.elmish.urlparser.1.0.1.nupkg.sha512"
|
||||
},
|
||||
"Fable.Promise/3.2.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-4A+Iiembrny2h3AE2BIbchfuLmWHNhpkOTvbTtFXHtGzHVMqEVFRXrAfdy83wX2wK5Og3fqRo1y8t/Bqkd7j6g==",
|
||||
"path": "fable.promise/3.2.0",
|
||||
"hashPath": "fable.promise.3.2.0.nupkg.sha512"
|
||||
},
|
||||
"Fable.React/9.2.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ZMRkZpBy+6ytUHPk0WjRh15kigncmSGLOAbtf12VaSy48mtgqIW4lC/23X/FEvz8tUGwHvBUen2GzUU1G/L+RQ==",
|
||||
"path": "fable.react/9.2.0",
|
||||
"hashPath": "fable.react.9.2.0.nupkg.sha512"
|
||||
},
|
||||
"Fable.React.Types/18.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-/b8WZ3Bdfhqy9r60ZK9JGZaGNjIMb0ogsrvWIg3k7KfCEvJs5X6+7hCybVkyjVoxwzn9wLyYGRbh5wmuHQT/Vg==",
|
||||
"path": "fable.react.types/18.3.0",
|
||||
"hashPath": "fable.react.types.18.3.0.nupkg.sha512"
|
||||
},
|
||||
"Fable.ReactDom.Types/18.2.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-2WoBjsLiSgrvR68OJXko0iVaqeMbkPM5Bx813A1WlxOSCJ50M9fwnlwG/MUEZtiOIhQmku/YTJY5a8E8r1+j2Q==",
|
||||
"path": "fable.reactdom.types/18.2.0",
|
||||
"hashPath": "fable.reactdom.types.18.2.0.nupkg.sha512"
|
||||
},
|
||||
"FSharp.Core/6.0.7": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-e6wGrq5smV3Yk2fBE/Y0nBG5oFyF59k5Je0a0QDydUpg6liyaafGjD3xvutciKepCP2knspZ/sWViC/F1OyyQQ==",
|
||||
"path": "fsharp.core/6.0.7",
|
||||
"hashPath": "fsharp.core.6.0.7.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.NETCore.Platforms/1.1.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-TMBuzAHpTenGbGgk0SMTwyEkyijY/Eae4ZGsFNYJvAr/LDn1ku3Etp3FPxChmDp5HHF3kzJuoaa08N0xjqAJfQ==",
|
||||
"path": "microsoft.netcore.platforms/1.1.1",
|
||||
"hashPath": "microsoft.netcore.platforms.1.1.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.NETCore.Targets/1.1.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3Wrmi0kJDzClwAC+iBdUBpEKmEle8FQNsCs77fkiOIw/9oYA07bL1EZNX0kQ2OMN3xpwvl0vAtOCYY3ndDNlhQ==",
|
||||
"path": "microsoft.netcore.targets/1.1.3",
|
||||
"hashPath": "microsoft.netcore.targets.1.1.3.nupkg.sha512"
|
||||
},
|
||||
"System.Runtime/4.3.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-abhfv1dTK6NXOmu4bgHIONxHyEqFjW8HwXPmpY9gmll+ix9UNo4XDcmzJn6oLooftxNssVHdJC1pGT9jkSynQg==",
|
||||
"path": "system.runtime/4.3.1",
|
||||
"hashPath": "system.runtime.4.3.1.nupkg.sha512"
|
||||
},
|
||||
"Thoth.Json/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-fJ9nhZezOyRIsaluEIj5ytCSCbnsvA7ZCa1kY7KkWPqyHtc+SDvjthz5edoFxOAHH44iSmxl6zakapjMSRJbbw==",
|
||||
"path": "thoth.json/6.0.0",
|
||||
"hashPath": "thoth.json.6.0.0.nupkg.sha512"
|
||||
}
|
||||
}
|
||||
}
|
||||
+16
-10
@@ -1,6 +1,6 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<Version>1.0.0</Version>
|
||||
<AssemblyVersion>1.0.0</AssemblyVersion>
|
||||
</PropertyGroup>
|
||||
@@ -17,6 +17,10 @@
|
||||
</Otherwise>
|
||||
</Choose>
|
||||
<ItemGroup>
|
||||
<!-- Global to the app -->
|
||||
<Compile Include="Lens.fs" />
|
||||
<Compile Include="Cmd.fs" />
|
||||
|
||||
<Compile Include="$(API)/ServiceContext.fs" />
|
||||
<Compile Include="$(API)/DynamicService.fs" />
|
||||
<Compile Include="Imports.fs" />
|
||||
@@ -37,9 +41,7 @@
|
||||
<Compile Include="$(API)/fable/co2.fable.fs" />
|
||||
<Compile Include="$(API)/fable/MarketDataRelay.fable.fs" />
|
||||
<!-- Global to the app -->
|
||||
<Compile Include="Lens.fs" />
|
||||
<Compile Include="Global.fs" />
|
||||
<Compile Include="Cmd.fs" />
|
||||
<Compile Include="Controls/nbsp.fs" />
|
||||
<Compile Include="Controls/Button.fs" />
|
||||
<Compile Include="Controls/ReactGrid.fs" />
|
||||
@@ -68,13 +70,17 @@
|
||||
<Compile Include="App.fs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Elmish" Version="4.0.1" />
|
||||
<PackageReference Include="Elmish.Navigation" Version="1.0.0" />
|
||||
<PackageReference Include="Fable.Core" Version="4.0.0-snake-island-alpha-005" />
|
||||
<PackageReference Include="Fable.Elmish" Version="4.0.0-beta-3" />
|
||||
<PackageReference Include="Fable.Elmish.React" Version="4.0.0-beta-2" />
|
||||
<PackageReference Include="Fable.Elmish.UrlParser" Version="1.0.0-beta-1" />
|
||||
<PackageReference Include="Fable.Elmish.Debugger" Version="4.0.0-beta-1" />
|
||||
<PackageReference Include="Fable.Elmish.HMR" Version="6.0.0-beta-002" />
|
||||
<PackageReference Include="Fable.Fetch" Version="2.4.0" />
|
||||
<PackageReference Include="Fable.Core" Version="4.0.0-theta-007" />
|
||||
<PackageReference Include="Fable.Elmish" Version="4.0.1" />
|
||||
<PackageReference Include="Fable.Elmish.Browser" Version="4.0.1" />
|
||||
<PackageReference Include="Fable.Elmish.React" Version="4.0.0" />
|
||||
<PackageReference Include="Fable.Elmish.UrlParser" Version="1.0.1" />
|
||||
<PackageReference Include="Fable.Elmish.Debugger" Version="4.0.0" />
|
||||
<PackageReference Include="Fable.Elmish.HMR" Version="7.0.0" />
|
||||
<PackageReference Include="Fable.Promise" Version="3.2.0" />
|
||||
<PackageReference Include="Fable.React" Version="9.2.0" />
|
||||
<PackageReference Include="System.Runtime" Version="4.3.1" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -33,7 +33,7 @@ module.exports = env => {
|
||||
ignored: "./**/*"
|
||||
},
|
||||
devtool: isProduction ? undefined : "source-map",
|
||||
entry: resolve('src/ui.fsproj'),
|
||||
entry: resolve(`${output_path}/App.js`),
|
||||
output: {
|
||||
filename: 'bundle.js',
|
||||
path: output_path,
|
||||
@@ -58,16 +58,6 @@ module.exports = env => {
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.fs(x|proj)?$/,
|
||||
use: {
|
||||
loader: "fable-loader",
|
||||
options: {
|
||||
babel: babelOptions,
|
||||
define: isProduction ? [] : ["DEBUG"]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
exclude: /node_modules/,
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2015
|
||||
Project("{f2a71f9b-5d33-465a-a702-920d77279786}") = "ui", "web/ui/src/ui.fsproj", "{E5DEFC96-37CF-4844-9C9E-CFA0A9A8AED3}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{E5DEFC96-37CF-4844-9C9E-CFA0A9A8AED3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E5DEFC96-37CF-4844-9C9E-CFA0A9A8AED3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E5DEFC96-37CF-4844-9C9E-CFA0A9A8AED3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E5DEFC96-37CF-4844-9C9E-CFA0A9A8AED3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -307,10 +307,13 @@ def build(
|
||||
|
||||
bins = SparkPaths.client_bins(build_dir, configuration=configuration)
|
||||
for t in publish_tgts:
|
||||
build_cmd_steps.append(f'cd {Path(t.path).parent}')
|
||||
build_cmd_steps.append('dotnet publish -c Release -r win-x64 --sc')
|
||||
build_cmd_steps.append(f'cmake --build {build_dir} --config {configuration}')
|
||||
build_cmd_steps.append(f'dotnet publish -c Release -r win-x64 --sc {t.path}')
|
||||
libspark_path=build_dir.joinpath("src", "lib", configuration, "libspark.dll")
|
||||
print(f'libspark-src: {libspark_path}')
|
||||
print(f'libspark-dst: {bins.joinpath("win-x64", "publish")}')
|
||||
build_cmd_steps.append(
|
||||
f'copy {bins.joinpath("libspark.dll")} {bins.joinpath("win-x64", "publish")}')
|
||||
f'copy {libspark_path} {bins.joinpath("win-x64", "publish")}')
|
||||
|
||||
build_cmd = ' && '.join(build_cmd_steps)
|
||||
proc_results.append(subprocess.run(build_cmd))
|
||||
|
||||
@@ -154,6 +154,14 @@ def _fable_webpack(src_path, ui_out_path):
|
||||
copytree(str(src_path.joinpath('ui', 'public')), str(ui_out_path))
|
||||
os.chdir(src_path.joinpath('ui', 'src'))
|
||||
_wrapped_run('dotnet restore')
|
||||
_wrapped_run('dotnet tool restore')
|
||||
# Note: We used to convert fs -> js via webpack, using the node pkgs
|
||||
# fable-compiler & fable-loader. However, as of 02/24/2023, they are
|
||||
# incompatible w/ net7.0. Fortunately the dotnet tool 'fable' IS
|
||||
# compatible w/ net7.0.
|
||||
_wrapped_run(f'dotnet fable -o {ui_out_path}')
|
||||
# Run webpack via 'npm run build'
|
||||
# (the build cmd is defined in package.json)
|
||||
_wrapped_run('npm run build')
|
||||
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ class SparkPaths:
|
||||
|
||||
@staticmethod
|
||||
def client_bins(build_root=_default_build(), configuration='Release'):
|
||||
return build_root.joinpath(configuration, 'bin', 'net6.0-windows')
|
||||
return build_root.joinpath(configuration, 'bin', 'net7.0-windows')
|
||||
|
||||
@staticmethod
|
||||
def client_sln():
|
||||
|
||||
@@ -38,10 +38,10 @@ def _main():
|
||||
output_dir = args.output_dir or SparkPaths.default_build()
|
||||
output_dir = Path(output_dir)
|
||||
build(
|
||||
configuration='release',
|
||||
configuration='Release',
|
||||
restore=True,
|
||||
build_dir=output_dir,
|
||||
targets=['libspark', 'publish'],
|
||||
targets=['publish'],
|
||||
verbosity=args.verbosity)
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user